【发布时间】:2010-08-03 07:08:15
【问题描述】:
我目前正在处理一个问题,我必须将大量函数调度到另一个线程以防止当前函数阻塞。 现在我想知道执行此任务的最快方法是什么。
目前我被困住了
ThreadPool.UnsafeQueueUserWorkItem
因为它比常规的 QueueUserWorkItem 稍快。但是,我担心线程池可能会在这里阻塞。是否有更快的方法将方法调用分派到另一个线程? 我只是想知道这样一项任务的最佳做法是什么?不安全的代码不会有问题,因为它在已经使用了很多互操作的场景中。 谢谢 j.
【问题讨论】:
-
当您说“更快”时,您的意思是要减少“主”线程上的阻塞吗?具体来说,将项目排队等待后台处理的调用是否尽快返回?
-
WRT 您声明的关注点,线程池不会阻塞该调用(或正常的“安全”调用),但它确实返回一个布尔值,说明它是否成功排队,理论上是如果它返回 false,你可能想在当前线程上执行它,或者稍后再试,或者其他什么。
-
您每次都派发到同一个方法吗?他们需要彼此异步操作吗?生产者/消费者方法是否可以接受? (所以调用者只是将一些东西添加到队列中)。这是哪个版本的 .NET?
-
是的,我希望“调度”线程尽快返回。如果调度的方法调用的实际执行延迟了一些毫秒,我不在乎。它只是关于快速返回时间,到目前为止,unsafequeueuserworkitem 是最快的。还是有另一种方法可以将数百个小工作部分分派到另一个线程,同时在调用线程中快速返回?
-
我收到很多针对特定对象的 Request()-调用(每秒几百个)并异步返回这些生成时间稍长的对象(可以并行化)(分布在 20-30同一类的实例)。但是,调用这些 Request() 方法的方法需要它们快速返回,否则会破坏整个处理过程。无法更改 Request() 调用代码。
标签: c# performance multithreading asynchronous