zoukankan      html  css  js  c++  java
  • 多线程和多进程

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

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

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

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

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

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

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

  • 相关阅读:
    web----VLAN
    安装 Android Studio 2.3.2
    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
    2017面向对象程序设计(JAVA)第3周学习指导及要求(2017.9.6-2017.9.12)
    第3周教学课件及实验任务已发布!
    关于字符串比较
    优秀博文推荐
    新手如何学习Java——Java学习路线图
    2017面向对象程序设计(Java)第2周学习指导及要求(2017.8.28-2017.9.3)
    第二周教学课件及实验任务已发布!
  • 原文地址:https://www.cnblogs.com/li0803/p/1323930.html
Copyright © 2011-2022 走看看