虽然这是一个小问题,但很多人并没有说清楚。要了解这个就要明白它们出现的历史。
如果操作系统同一时间只执行一个程序,那么当这个程序进行IO操作等耗时事件时,CPU是空闲的,所以引入了进程,操作系统让CPU可以同时处理多个程序,当一个进程阻塞,可以切换去执行另外的进程,从而充分利用。
这个时候一个进程代表一部分资源和一个任务。在任务切换的时候,资源就要跟随切换,包括cpu的状态、寄存器的数据、地址空间等,当进程东西越来越多,这样的资源切换就会耗费巨大。
这个时候引入了线程,就是依然按进程分配资源,但是按线程分配任务。这就是所谓的“进程是资源分配的最小单位,线程是CPU调度的最小单位”。这时任务切换,如果还在一个进程里,那么资源就不需要切换,消耗就减少了。而且很多时候都是在一段时间内一直用一个进程,有这样的“局部性”的特性在。
这就是它们的主要区别:它们出现的原因不同,解决的问题不同。进程是为了并发执行任务而来,线程是为了更轻量的、更高效的执行多任务而来。
多说一句:虚拟内存机制的设计,使得在进程的世界里,它拥有所有的内存,它的眼里是没有其他进程的。每个进程之间就像是平行世界,他们各自独立存在。而线程是共享内存的,在A线程里的地址0x12345678跟B线程的0x12345678是同一个东西,这样才有了合作和资源竞争。
网友评论