2015-11-02 51 views

回答

1

有已经在这里的答案 - Is it true that for long running processes it is better to do thread manually instead of threadpool?

这是事实。线程池针对小工作单元进行了优化,您可以通过保持线程池 线程来干扰其他工作。

我的经验法则是如果一个操作可能需要一秒以上的时间,它不应该在一个线程池线程上。这可能相当长。

虽然这是无证的,但如果你使用 TaskCreationOptions.LongRunning启动一个任务,那么一个新的线程将启动到 运行任务。

对于大多数IO任务,您应该真正使用框架 的异步版本。这些使用内核函数 并且意味着你不会阻塞任何线程。

与往常一样,我推荐阅读Joe Albahari的免费电子书,然后 Joe Duffy的Windows并发编程。后者长1000页,其中有很多有用的细节。

0

尽管使用线程可以做更多的事情,但每个线程都会占用CPU的一部分,并占用更多的内存。如果你有一个线程用于长时间运行的任务,那么线程池就有可能在短时间内处理该线程,以便为其他任务\线程留出空间。

你会更好地使用异步任务将该线程分成更小的任务,并让他们等待,等待和其他一些选项。

这里这个链接应该帮助你一点点进一步

Tasks, Await, Await All...

相关问题