不要过度迷恋多线程编程,它也许对你是个传说

结论:“多线程编程比串行编程编码阶段慢,执行效率不一定快”,听到这个,是不是想放弃多线程,别急,继续往下看。

1  名词解释

        串行:同一个时间点,只能做一件事,做过一件事,再做下一件事,例如先起床,穿衣服,吃饭...... 从微观的角度来说,就像是时间,只能1分1秒的过。

        并发:同一个时间点,同时做多件事,但是每件事可能都做的不是那么完美,可谓一心不可二用,例如我们吃东西的时候,可以看电视,但是有时候不是傻呵呵看电视入迷了,忘了吃东西,就是把东西塞到鼻孔里了,从计算机的角度来说,就是你在听歌的时候,可以玩游戏,由于计算机的大脑比我们精明很多,脑子也比我们转的快,所以一般不会出错。

        并行: 同一个时间点,正在意义上的同时做多件事,好像是2个人一样。就好像有2个一模一样的的你,一个在睡觉,一个在学习,从计算机的角度来说,就是有2个大脑,一个大脑指挥做一件事。

        单核:cpu只有一个运算核心,同一个时间点只能做一件事。

        多核(包含单核的HT, Hyper-Threading,也就是所谓的超线程,模拟多核):cpu有多个运算核心,类似于多个大脑。
并发和并行都可以归为多线程的范畴。

2  为什么会出现多线程编程?

       效率,为了效率, 因为之前的串行编程,不能满足个别场景的执行效率,所以有个多线程编程,那么程序员如果不能搞清楚在什么场景下,要使用多线程,那么原因只有一个:装x ,装x,装x  重要的事情说三遍,但是想要玩好多线程编程也不是那么容易,需要一定的技术功底,主要考虑一个问题:线程安全 。所以装X也需要一定的门槛......

 

3  计算机核心数对于多线程的影响?

    单核   
        运行单线程:中规中矩,执行效率不一定低。
        运行多线程:存在一定的上下文切换,特殊任务下,能提高系统的吞吐率。

    多核
       运行单线程:造成一定的硬件浪费,无法充分发挥硬件的性能,特殊任务下,能提高执行效率。
       运行多线程:能够发挥硬件的优势,但是特殊任务下,不一定能提高执行效率,只能提高系统的吞吐能力。
 

4 任务类型对于多线程的影响?

      计算机执行的任务无非有2大类: 计算密集型和IO密集型。

       计算密集型:有大量计算的任务,耗费的是cpu,例如数字的各种运算,对于圆周率3.14的计算,这种情况下,用多线程可以充分利用cpu,但是需要控制多线程的数量,数量过多容易造成上下文切换,执行效率下降,多线程的数量最好和核心数相当。

       IO密集型:对于IO主要涉及到内存,磁盘,网络等存储或者传输的任务,大部分的状况是CPU在等I/O (硬盘/内存/网络) 的读/写操作,此时CPU Loading并不高,这种情况下,利用多线程编程能提高系统的吞吐量 。

 

5 结论

    通过以上介绍,我们知道影响多线程的因素主要有: 任务类型和核心数,那么我们可以得到以下使用场景(但是并不是绝对的,具体情况下具体分析):

   1.如果是执行多个计算密集型任务
    ①单核:串行 > 并行,即是单线程>多线程
    ②多核:并行 > 串行,即是多线程>单线程

  2.如果是执行多个IO密集型任务:
    ①单核:并行 > 串行,即是多线程>单线程
    ②多核:并行 > 串行,即是多线程>单线程

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值