这是真的,对于长时间运行的过程中,最好是做线改为手动线程池?(Is it true that for

2019-06-23 22:01发布

我读了一天,对于长时间运行的任务我最好的选择是手动创建线程,而不是使用.NET的线程池或任务并行。 我真的希望有人来开导我,因为我学习C#线程,专为长时间运行的IO任务。 先感谢您。

Answer 1:

那是真实的。 线程池工作的小户型优化,你可以持有到一个线程池线程与其他工作干扰。

我的经验法则是,如果一个操作可能需要超过一秒钟,它不应该是一个线程池线程。 这可能是相当长的。

虽然这是无证,如果你开始一个TaskTaskCreationOptions.LongRunning然后一个新的线程将开始运行任务。

对于大多数IO任务,还有的认为你应该使用框架方法异步版本。 这些使用的内核函数,并意味着你会不会阻止任何线程。

与往常一样,我建议你阅读乔阿尔巴哈利的免费的电子书 ,随后乔达菲的在Windows并发编程 。 后者是1000页长,但充满了有用的细节。



Answer 2:

你是对的,线程池线程是轻量级的,便宜的,因为可以改期服务从线程池一个新的请求,所以一旦线程操作完成,线程池可以重新安排在同一个线程进行其它的操作,还可以通过最小线程操作数( ThreadPool.SetMinThreads() ),所以那些会,直到新的请求都还活着。 所以这是一个多轻量级操作的很好的解决方案,比如你需要创建一个单独的/新的线程每几秒钟。

在MSDN杂志一篇非常好的文章: 专用线程或线程池线程?

一旦达到的最小线程数,线程池的目的是限制正在创建每500毫秒一个线程数。 这是一个聪明的机制,避免产生新的线程,当多个线程池中的线程可以在该期限内发布的昂贵成本。

由于.NET 4.0 - 任务并行库是一个很好的高层次的抽象,替代了手工线程管理和同步功能,让你的代码是不容易出错。 所以刚才创建任务与TaskCreationOptions.LongRunning ,我相信这将是一个应用程序体系结构从maintability观点的最好投资。

有用的阅读:

  • 选择任务并行库和线程池之间


文章来源: Is it true that for long running processes it is better to do thread manually instead of threadpool?