进程是操作系统运行的一个程序,线程是执行单元或者是一条执行路径。
以360安全卫士为例,运行360安全卫士即开启了一个进程,执行垃圾清理、木马查杀等功能时即开启了多个线程。
根本区别:进程是资源分配的最小单位,线程是程序调度和执行的最小单位。
调度:每次创建/撤销进程时,系统都要为它分配/撤销独立的资源,建立数据表来维护代码段、堆栈段和数据段;线程是进程的一个执行流,由CPU独立调度执行,且在每个时间片中只有一个线程执行。同一进程中线程切换不会影响进程切换,而由一个进程中的线程切换到另一个进程中的线程时,需要进程切换。
资源分配:进程都是拥有资源的一个独立单位,它可以拥有自己的资源。线程一般不拥有系统资源(只有一些必不可少的资源),在同一个进程中,线程共享进程的所有资源,使用相同的地址空间,每个线程有自己的堆栈和局部变量。
开销:CPU创建/撤销/切换一个线程的花费远比进程要小得多。
通信:线程间可以直接读写进程数据段(如全局变量)来进行通信,需要进程同步和互斥手段辅助,进程之间的通信需要以IPC方式(Socket)进行。
并发性:进程和线程都允许并发。fork()函数可以在父进程中创建一个子进程,当进程接收到来自客户端新的请求时,复制出一个子进程来处理请求(数据不共享),即父进程只需负责监控请求的到来,然后创建子进程让其去处理,实现并发。在多线程中,父进程和子进程共享同一块内存空间,对同一区域执行操作,因此要利用锁机制,避免多个线程同时往同一区域写入数据而造成数据错乱。
(图片来源见水印,如有冒犯,联系即删)
Linux系统并发:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
强壮性:多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响(隔离机制)。
Linux 进程和线程比较
最新推荐文章于 2023-08-30 00:14:54 发布