我正在使用Windows服务中的线程池进行并行处理。我的线程很长。我的设计中有哪些不足之处?
答案 0 :(得分:1)
这里已有答案 - Is it true that for long running processes it is better to do thread manually instead of threadpool?
这是事实。线程池针对小型工作单元进行了优化 你可以通过保持线程池来干扰其他工作 线程。
我的经验法则是,如果操作可能需要一秒钟以上,那么 不应该在线程池线程上。那可能很长。
虽然这是未记录的,但是如果您启动了一个任务 TaskCreationOptions.LongRunning然后将启动一个新的Thread 运行任务。
对于大多数IO任务,都有框架的异步版本 你真正应该使用的方法。这些都使用了内核函数 并且意味着你不会阻止任何线程。
与往常一样,我建议阅读Joe Albahari的免费电子书,然后阅读 Joe Duffy在Windows上的并发编程。后来是1000页 很长,但充满了有用的细节。
答案 1 :(得分:0)
尽管使用线程可以做得更多,但每个线程占用了你的部分CPU,并且占用了更多的内存。如果你有一个长期运行任务的线程,它有可能让线程池在短时间内占用该线程,以便为其他任务\线程提供空间。
最好使用异步任务将该线程拆分为较小的任务,并让它们等待,等待和其他一些选项。
此链接可以帮助您进一步了解