.net - 的确,对于长时间运行的进程,最好手动执行线程而不是线程池?

标签 .net multithreading c#-4.0 threadpool task-parallel-library

前几天我读到,对于长时间运行的任务,我最好的选择是手动创建线程,而不是使用.NET的线程池或Task Parallel。当我学习有关C#线程的信息时,特别是针对长时间运行的IO任务,我真的很想启发我。先感谢您。

最佳答案

那是真实的。线程池针对小型工作单元进行了优化,您可以通过保留线程池线程来干扰其他工作。

我的经验法则是,如果一个操作可能花费一秒钟以上的时间,则该操作不应在线程池线程上。那可能很长。

尽管未记录,但是如果您使用Task启动TaskCreationOptions.LongRunning,则将启动新的线程来运行任务。

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

与往常一样,我建议阅读Joe Albahari's free ebook
其次是Joe Duffy's Concurrent Programming on Windows。后者长1000页,但充满了有用的详细信息。

关于.net - 的确,对于长时间运行的进程,最好手动执行线程而不是线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298641/

相关文章:

c# - 我将连接字符串与众多客户端放在哪里?

java - 将值放在 ConcurrentHashMap 中是否是原子的?

c++ - 如果我只需要它在其他线程中的值,我是否应该在一个线程中锁定一个变量,如果我不这样做,为什么它会起作用?

java - Java在多个阻止程序上进行阻止

c# - 反序列化对 Saml2SecurityToken 的 SAML2 响应时出错

c# - 使用 wpf 应用程序读取条形码

c# - JPG、DOC、PDF 等文件是否也编译成程序集?

.net - 框架和体系结构有什么区别?

c#-4.0 - 在 VS 2010 中向 Windows 服务添加 System.Threading.Timer

c# - 转换 VB.NET --> C# 项目