线程与进程的区别

虽然这是一个小问题,但很多人并没有说清楚。要了解这个就要明白它们出现的历史。

如果操作系统同一时间只执行一个程序,那么当这个程序进行IO操作等耗时事件时,CPU是空闲的,所以引入了进程,操作系统让CPU可以同时处理多个程序,当一个进程阻塞,可以切换去执行另外的进程,从而充分利用。

这个时候一个进程代表一部分资源和一个任务。在任务切换的时候,资源就要跟随切换,包括cpu的状态、寄存器的数据、地址空间等,当进程东西越来越多,这样的资源切换就会耗费巨大。

这个时候引入了线程,就是依然按进程分配资源,但是按线程分配任务。这就是所谓的“进程是资源分配的最小单位,线程是CPU调度的最小单位”。这时任务切换,如果还在一个进程里,那么资源就不需要切换,消耗就减少了。而且很多时候都是在一段时间内一直用一个进程,有这样的“局部性”的特性在。

这就是它们的主要区别:它们出现的原因不同,解决的问题不同。进程是为了并发执行任务而来,线程是为了更轻量的、更高效的执行多任务而来。

多说一句:虚拟内存机制的设计,使得在进程的世界里,它拥有所有的内存,它的眼里是没有其他进程的。每个进程之间就像是平行世界,他们各自独立存在。而线程是共享内存的,在A线程里的地址0x12345678跟B线程的0x12345678是同一个东西,这样才有了合作和资源竞争。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容