多线程和多进程

1.单进程,单线程:
设想这样一个情景,只有一个CPU(比如大家熟悉的单片机),要运行一个程序,如果仅仅只是这个程序占有这个CPU,那么很好想象,从这个程序开使运行,到程序结束运行,我们可以认为这是一个进程.事实上,现在大多单片机编程者都是使用这种方式进行单片机编程的.
2.多进程,单线程:
还是上面的情景,但是我们可以想象得到有这样一种情况,这个程序在运行过程中总是要依赖(等待)一定的条件才能继续运行.比如一个键盘的响应程序,其中很多时间都是在等待用户的按键动作.这个时间显然CPU是在做"无用功"的(它只是在空闲的等待着对它来说千年一遇的用户的动作),那么这个时间CPU完全可以暂时将这个等待扔在一边,转而可以利用这些时间去处理一些其它的事情.比如此时它还可以"抽空"来运行其它程序,比如显示程序....这样的处理方式显然是与前一种不同的,它带来了一种新的技术,即多进程设计.进程这个词来自"PROCESS",从词意本身就可看出其有"过程",进行等之意.
3.多进程,多线程:
类似的,现在假设我们的程序运行平台是多处理器(SMP)的(多核,或INTEL的超线程均类似).此时,我们当然可以按照"多进程,单线程"的方式让程序在这样的平台上运行,虽然有点浪费.但是,你可以想象一下,当一个程序在一个CPU上运行时,是不是其它的CPU我们也可以让它加入进来,别忘了,我们可不止一个CPU哦,为什么让它空闲在那呢!于是,我们想象者本来在一个进程中的任务,我们现在将其分成了多个子任务,让每个空闲的CPU去执行若干不同的子任务,当这些子任务完成后,整个任务也就完成了.于是,这又带来了多线程技术.线程这个词来自"THREAD",我不知道线程这个词翻译的好不好,反正也不明其意."THREAD"英文有"遍布,到处发生"之意,正说明了其线程的并发性.

无论进程,还是线程,其最终目的就是最大限度的提高程序的并行性(或着系统的吞吐量).对"单进程,单线程",一段时间段内,每个时刻都只有一个程序在运行,对"多进程,单线程",尽管在每个时刻,只有一个程序在运行,但是在一段时间段内,却有多个程序在运行,对"多进程,多线程",对每个时刻,每个时间段,都可能有多个程序在运行.它们的并行性程度大小为"单进程,单线程"<"多进程,单线程"<"多进程,多线程".

以上是转载---------------------------------------------------------------------

以下是个人观点-----------------------------------------------------------------

因为,进程可以打开和操作系统资源而线程不行

所以,在并发运行的环境中,如果程序要操作的资源比较大,最好可以做成多进程,由进程动态加载和资源。

好处:分配到多个进程动态加载资源,可以避免程序启动时一起性加载大型资源的长时间的等待,并且按需加载和释放资源         还能起到节省内存空间的作用(嵌入式开发中应该是很有用的吧)

原文地址:https://www.cnblogs.com/li0803/p/1323930.html