码迷,mamicode.com
首页 > 编程语言 > 详细

线程(Thread、ThreadPool)

时间:2018-03-27 18:51:50      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:ram   pos   存在   work   多线程   创建   内存   作者   就是   

多线程的操作,推荐使用线程池线程而非新建线程。因为就算只是单纯的新建一个线程,这个线程什么事情也不做,都大约需要1M的内存空间来存储执行上下文数据结构,并且线程的创建与回收也需要消耗资源,耗费时间。而线程池的优势在于线程池中的线程是根据需要创建与销毁,是最优的存在。但是这也有个问题,那就是线程池线程都是后台线程,主线程执行完毕后,不会等待后台线程而直接结束程序。所以下面就要引出.NET Framework4.0提供的Task,来解决此类问题。

Task是.NET Framework4.0提供的新的操作线程池线程的封装类。它提供:等待、终止、返回值...优化线程操作的功能。

1)ThreadPool的代码将以先进先出的算法存储在全局队列中,并且多个工作者线程之间竞争同一个同步锁。(这就Task性能优于ThreadPool的第一个原因)

2)Task的代码将以先进后出的算法存储在本地队列中,工作者线程执行本地队列中的代码没有同步锁的限制(这是Task性能优于ThreadPool的第二个原因),并且当工作者线程2空闲并且工作者线程1忙碌时,工作者线程2会尝试从工作者线程1(或者别的忙碌的工作者线程)的本地队列尾部“偷”任务,并会获取一个同步锁,不过这种行为很少发生。

线程(Thread、ThreadPool)

标签:ram   pos   存在   work   多线程   创建   内存   作者   就是   

原文地址:https://www.cnblogs.com/qaidouding/p/8658738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!