多线程与异步的抉择_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 多线程与异步的抉择

多线程与异步的抉择

 2013/12/7 21:26:15  Joe·Zhou  博客园  我要评论(0)
  • 摘要:在讨论这个问题之前,先学习一下时间片的概念。时间片即CPU分配给各个程序的时间,每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。(百度百科)多线程正是充分利用利用时间片,从而充分利用CPU的宝贵资源来提高执行效率。但是创建线程和销毁线程的开销都比较大,但线程数量太多时,性能会很差
  • 标签:多线程 线程 异步

      在讨论这个问题之前,先学习一下时间片的概念。

时间片即CPU分配给各个程序的时间,每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。(百度百科)

     多线程正是充分利用利用时间片,从而充分利用CPU的宝贵资源来提高执行效率。但是创建线程和销毁线程的开销都比较大,但线程数量太多时,性能会很差,因为操作系统需要在它们之间切换,消耗的内存也也很大。

     在执行很多任务时,开辟更多线程对于性能提升没有太大意义,反而会降低效率。对于CPU密集型的操作,适当的使用多线程会提高cpu的利用率,从而提高性能。但是对于比如IO,网络,数据库连接,打印机等一些资源时,却几乎没有意义。因为瓶颈不在CPU,无论你怎么提高CPU的利用效率也没有任何意义。例如:

DMA的意思是直接内存访问,是一种不经过CPU而直接从内存了存取数据的数据交换模式。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。

     在类似这种情况下,它们有自己的独特的处理方式,CPU只是下达开始指令和接收结束指令。此时我们选择异步处理方式就显得非常有意义。异步不会马上返回结果,等收到准备好的信号时我们开始处理我们真正要处理的逻辑,在等待过程中我们可以干很多其它事情。

     所以大多数时候,当我们的操作是计算密集型时采用多线程,当我们的操作时IO密集型时使用异步。

上一篇: 基本数据类型 下一篇: java中的事件机制
发表评论
用户名: 匿名