我目前正在处理一个问题,我必须将大量函数分派(dispatch)给另一个线程以防止当前函数阻塞。 现在我想知道执行此任务最快的方法是什么。
目前我坚持
ThreadPool.UnsafeQueueUserWorkItem
因为它比常规的 QueueUserWorkItem 稍快。但是,恐怕线程池可能会在这里阻止它。有没有更快的方法将方法调用分派(dispatch)到另一个线程? 我只是想知道这样一项任务的最佳做法是什么?不安全的代码不会有问题,因为它处于已经使用了大量互操作的场景中。 谢谢 j.
最佳答案
CLR(4) 团队建议:
Task is now the preferred way to queue work to the thread pool.
阅读CLR 4.0 ThreadPool Improvements: Part 1和 New and Improved CLR 4 Thread Pool Engine了解详细信息。简而言之,原因是:本地队列、线程重用、工作窃取。基本上是为了负载平衡目标。
额外内容:
我不明白为什么这不是答案(否决)。
你写了
i have to dispatch hell a lot of functions to another thread to prevent the current function from blocking"
我回复: 一些 TPL(针对 net35 存在)“ block ”(并发集合、旋转原语 等)专为高并发访问而设计,专注于最小化或消除阻塞以提高效率工作的管理。您也可以使用这些 block (例如 - BlockingCollection 解决您的问题)。 TPL 旨在以最小的开销(或在 PLinq 的帮助下数百万)创建和处理数百(甚至数千)个 cpu/io 绑定(bind)操作(任务)。
你问:
i just wonder what the best practice is for such a task?
我已经回答过:最佳实践 - TPL(有道理,不仅仅是我的建议)
关于c# - 异步执行方法的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3394308/