首先就是概念:
进程:
并发执行的程序在执行的过程之中分配和管理资源的基本单位,是动态的概念,是计算机系统资源竞争的基本单位,我们手机中的一个App就是我们的一个进程。
线程:
是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
这里产生一个问题就是为什么要引入进程和线程:
我们知道,当运行一个程序之后就会产生一个或者多个进程,若是操作系统之中没有进程的话,传统的程序想要并发执行;
就会产生两个问题:
1.程序和计算不相互对应的问题;比如,我们有一个单核处理器(cpu),我们运行一个程序A,需要执行a1,b1,操作;程序B,需要执行a2,b2的操作;若是我们的执行A程序的时候启动B程序,就会产生一个问题这个处理器就需要执行,a1,b1,a2,b2这样的四种操作,执行的顺序不定,也可以是a1,a2,b2,b1。这样就使得运行的程序和所执行的操作无法对应的错误。两个程序无法执行,这个时候就产生了进程的原理:将a1和b1,a2,b2分别使用两个进程A1和B1包括,这样处理器上A1和B1交替执行,申请资源,虽然整体上操作的执行顺序可变,但是具体的某个程序(进程)要执行的操作不会乱序。
2.程序存储的问题:
我们的程序是停停走走的程序,当我们的处理机去处理别的程序,我们需要将原来执行的程序保存到PCB(印刷电路板)上面,方便下次cpu执行时恢复,这样只有创建进程之后才能方便实现;
那为什么要引入线程呢?
我们进入进程去执行操作,这里又会产生一个问题:操作的顺序执行使得若存在耗时操作,cpu只能干等着,极大的消耗CPU的利用率、程序的效率。
当我们引入线程之后:当我们的一个线程之中存在耗时操作,可以将线程阻塞掉,让CPU去执行别的线程;大大提高CPU的利用率;
进程和线程的状态:
可以去:
进程的几种状态,以及切换步骤 - 知乎 (zhihu.com)
线程的5种状态详解老猫1226的博客-CSDN博客线程状态
讲的很详细;
二、进程和线程的区别
地址空间:
线程共享本进程的地址空间,而进程之间是独立的地址空间。
资源:
线程共享本进程的资源如内存、I/O、cpu等,不利于资源的管理和保护,而进程之间的资源是独立的,能很好的进行资源管理和保护。
健壮性:
多进程要比多线程健壮,一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。
执行过程:
每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,执行开销大。
但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小。
可并发性:
两者均可并发执行。
切换时:
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
其他:
线程是处理器调度的基本单位,但是进程不是。