进程
引用百度百科
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程
引用百度百科
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
简言之,当我们启动了一个应用程序的时候,计算机会相应地创建一个进程,而这样的一个进程就对应于这个应用程序,比如说:当我们启动了WeChat时,我们可以在任务管理器上看到一个进程为WeChat:
另外,我们可以看到内存这一列上WeChat进程占用内存155.8MB,即在计算机创建一个进程后,操作系统会为进程分配一部分的内存,应用的所有状态都会保存在这块内存中;
而线程,可以说一个进程包含有一个或多个线程,应用创建线程来辅助工作,这些线程可以共享以上提及的这块内存中的数据;
当我们启动的应用关闭了,对应的应用所创建的进程也随之终结,操作系统也会释放相关内存。所以有这样的一个操作,当应用处于卡顿无响应状态时,我们可以开启任务管理器,手动终结应用相关进程,进而操作系统释放相关内存,应用随之也能关闭了,最后重启应用即可;
当然值得一提,进程的终结,伴随着着进程内的线程也会终结;反之线程的终结,不一定会让进程终结;
这时候可能有人会发现,当我们启动了一个应用时,在任务管理器可能看到的不仅仅是一个进程。那是因为一个进程还可以要求操作系统生成另一个进程来执行不同的任务,操作系统又会为新的进程分配独立的内存;
我们可以称应用的核心进程为主进程,主进程启动后要求操作系统生成的另外的进程为副进程,主进程和副进程之间可以使用 IPC (Inter Process Communication)进行通信(这里不展开讲解IPC);主进程的终结会让副进程随之终结,所以如上相同的情况,如果应用卡顿无响应状态,我们结束进程时,选择主进程进行手动终结即可(一般情况,主进程占用内存最大);
举一个例子再次说明进程与线程:
某大学计算机学院内有多个实验室,不同实验室分别在实验室A,B,C…同时,实验室分别在研发不同的实验项目1,2,3…
某一天,院长决定开启实验项目1,这时候实验室A开始工作,这里【院长决定开启实验项目1】即【我们开启应用】,【实验室A开始工作】即【进程开始工作】,【实验室】就是【进程】;
我们再想想,这个项目需要很多的人力投入,所以实验室A决定了让实验室所有的成员参与,这是实验室成员就开始工作了,并且成员之间相互协调,也会有各自的工作内容,这里【实验室成员开始工作】即【线程开始工作】,【实验室成员】即【线程】;
综上,进程与线程之间的区别:
- 一个程序至少有一个进程,一个进程至少有一个线程
- 线程的划分尺度小于进程,使得多线程程序的并发性高
- 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
- 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
- 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配
————————————————
版权声明:本文为CSDN博主「我的小屋」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39430694/article/details/78518080