进程:资源分配的最小单位,线程:程序执行的最小单位
进程有独立的地址空间,线程没有单独的地址空间。
启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段或数据段,而运行一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的时间远远小于启动一个进程所花费的时间。
通信机制:进程之间要进行数据传递只能通过通信的方式,而线程之间是共享数据空间
从函数调用上来说:进程创建使用fork()操作,线程创建使用clone()操作
笔记本上的内容:
进程和线程的主要差别在于它们是不同的操作系统资料管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程的不同执行路径。线程有自己的堆栈和局部变量,而线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
以前的IE就是多线程的,所以一个Tab挂掉了整个IE就挂掉了,其他的Tab也不能用了,这就是因为一个线程死掉就等于整个进程死掉。chrome是用的多进程来管理多个Tab,所以不会有这样的问题。
一个线程包含以下内容:
一个指向当前被执行指令的指令指针
一个栈
一个寄存器的集合,定义了一部分描述正在执行线程的处理器状态的值
一个私有的数据区。
Linux的进程包含以下几个关键要素:
有一段可执行程序
有专用的系统堆栈空间
内核中有它的控制块(进程控制块),描述进程占用的资源,这样,进程才能接受内核的调度。
具有独立的存储空间
网友评论