在如今人人都有一部手机或电脑的年代,咱们几乎每天都在使用各类app,如微信,QQ,抖音,优酷等等软件,表面上咱们是与各类app交互,但若是站在操做系统的角度来看,其实咱们天天都是在和各类进程或者线程打交道,若是你已经有点疑惑了,不要紧,下面咱们慢慢来聊个明白。java
先看这么几个问题:编程
1,你手机或者电脑上装的各类app在本质上是什么?微信
2,一个软件打开和不打开的区别是什么?多线程
3,为何打开的软件越多就感受系统越慢?app
4,为何你在用微信语音的时候,还能和别人聊天发消息?jvm
下面咱们带着问题来学习一下这其中的知识:socket
首先对于第一个问题比较简单,咱们的各类app其实都是一个软件,描述的再专业一些就是一个程序或者一份能执行的代码。学习
第二个问题,在使用者层面,打开了就是能用的app,不打开就是一个快捷图标,但在操做系统层面就不同了,打开时候操做系统实际上会建立一个进程来运行,而关闭的时候,进程就会退出。spa
那么问题来了,什么是进程:简单的说就是一个正在运行的程序实例。 程序的运行是须要内存和各类操做系统资源的,不一样的程序使用的资源是不同的,好比你打开一个吃鸡游戏和打开一个记事本二者消耗的资源是有很大差别的。操作系统
这也就解释了为何打开的软件越多系统就越卡顿,本质上软件越多,打开的进程就越多,而每一个进程都须要必定能资源才能维持运行,咱们的操做系统的资源又是有限的,因此占用的越多系统就会越繁忙,就会出现各类卡顿和反应变慢。
仅仅把软件运行起来仍是不够的,由于咱们还要在软件里面各类交互,好比使用微信语音的同时,还能给对方发图片,或者捞个漂流瓶。再或者使用有道云笔记的时候,你在不停的写字,后台有一个线程会自动每隔一段时间保存一下内存,避免忽然断电时内容所有丢失,这底层其实就是使用不一样的线程来处理的。
到这里,咱们在总结下进程和线程的定义:
进程:一个正在运行的程序实例,包含一个或多个线程,最少有一个线程。
线程:执行进程的一部分程序或者代码指令。
那么他们之间的区别和联系是什么?
(1)进程包含至少一个线程,果只有一个线程,这个线程一般叫作主线程。线程是进程的一部分代码或者指令
(2)进程有独立的内存存储,线程共享进程的内存空间,此外线程有本身独立的的栈存储。
(3)进程通讯只能依靠pipe管道或者socket,一个进程内的线程能够直接通讯
(4)建立一个进程是重量级操做,而建立一个线程是轻量级操做
(5)进程的文件描述符大部分不共享,线程共享文件描述符
(6)进程有独立的signal信号,线程共享进程的signal信号
(7)进程相互之间不依赖,线程之间有依赖。
(8)进程不须要同步,线程通常须要同步
(9)进程是数据组织的概念,线程是cpu调度的概念
(10) 进程上下文切换慢,线程上下文切换快
最后还有一个问题,子进程与线程有什么关系?这里须要注意子进程也是一个进程,通常用于多任务的操做系统,子进程也称子任务与进程的性质是同样的,也能够包含一个或多个线程。
主演:克里斯·帕拉特 / 布莱丝·达拉斯·霍华德 / 泰德·拉文
猫眼电影演出 广告
购买
总结:
本文主要介绍了操做系统中进程和线程的定义,区别和联系。了解这些知识将更加有助于咱们学习和使用多线程编程。有一点须要你们注意,进程是程序的运行实例,相似面向对象编程里面的对象,而程序则更像是一个类,经过这个程序咱们能够构造多个对象,也就是咱们能够启动多个进程,好比PC上的QQ是能够启动数个的,固然跟软件有关系,有些软件只能启动一个,每启动一个程序,其实就是启动了一个进程。如在java的程序里面每启动一个main方法,其实就是启动了一个jvm进程,而main方法就是咱们上面所说的进程中至少包含一个线程的主线程。