c# - 异步执行方法的最快方法?

标签 c# performance multithreading asynchronous

我目前正在处理一个问题,我必须将大量函数分派(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 1New 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/

相关文章:

c# - 托管线程会影响 C dll 中的全局变量吗?

c# - 如何在 Orchard CMS 中的创建事件期间访问部件属性

c# - 实现具有通用约束的接口(interface)

c# - 有趣的 C# Contract.Requires 错误与评论?

html - CSS媒体查询: one file vs.分离文件及对加载速度的影响

objective-c - 快速枚举比嵌套枚举中的 for 循环慢(带有测试结果)?

php - 在 php 中添加过期 header 无法使其工作

android - 这是错误还是功能?在某些情况下,可以从不在 UI 线程上运行的任务访问 UI 线程

javascript - 如何使用 jquerycropit 插件最小化请求的图像?

android - 提高 OpenCV 性能 Android - 快速对象跟踪