对于线程进程,相必大家都很熟悉,但是很多人对线程和进程具体有什么不同还是不清楚,不知道为什么很多时候要用多线程而不是多进程。

对于进程的描述,我在进程创建和运行有过一些简单的描述,一点都不知道的可以参考一下。

多进程与多线程获得资源不同

内核提供给进程的虚拟内存与虚拟处理器,在多进程的情况下,可以让每一个进程都认为自己完全的占有整台电脑的资源。而在多线程的情况下,同易进程的多个线程之间共享同样的内存资源,但是独自占有处理器资源。

为什么使用多线程而不是多进程

其实线程能做的事情进程也可以做,多进程的低延迟和高I/O吞吐也可以通过I/O多路复用,非阻塞I/O和异步I/O来实现。这些技术可以使进程并发,不会阻塞进程。

但是

进程的上下文切换由于涉及把一个虚拟地址切换到另一个虚拟地址,所以代价比较大;而进程内的线程间切换由于共享同一个内存,代价几乎为0。在极端情况下,在某些ARM机器上,必须把整个CPU的缓存都清空。

多线程真正的优点

为什么现在的应用越来越倾向与使用多线程,真正的原因就是多线程能够 真正的并发运行 ,有多少处理器数就可以并行多少线程。在十多年前人们可能不在意多线程,因为当时的处理器数基本都只有一个,不像现在的处理器基本都是多核,手机的处理器甚至还有十核的,因此手机的应用基本都是多线程的,这样可以更好的利用资源。

多线程的缺点

多线程用起来是很爽,但是存在一个很大的问题:多线程的进程有多个事件在同时运行,而这些事件共享同一份内存,可能会同时读写同一个文件,一个不小心就会输出脏数据。

而且对多线程的程序的调试也是一个很让人头疼的问题(听说的,本人不清楚)

参考源