【发布时间】:2012-01-15 19:51:32
【问题描述】:
我希望这个问题有很多可能的解决方案,我自己可以提出一些解决方案,其中一些明显优于其他解决方案,但我确定没有一个是最佳解决方案,因此我很想听听您真正的多线程专家的意见.
我有大约 100 件可以同时执行的工作,因为它们之间没有依赖关系。如果我按顺序执行这些,我的总执行时间约为 1:30 秒。如果我将线程池中的每一项工作排队,大约需要 2m,这表明我试图一次做太多事情,所有这些线程之间的上下文切换正在否定拥有这些线程的优势。
因此,基于这样的假设(如果这是错误的,请随时将我击落),如果我在任何时候只排队我系统中的核心数量(这台机器上的 8 个)工作件,我将减少上下文切换,从而提高整体效率(当然,其他进程线程无法承受),谁能提出最佳模式/技术来做到这一点?
顺便说一句,我正在使用 smartthreadpool.codeplex.com,但我不必这样做。
【问题讨论】:
-
我不知道“智能”线程池,但它应该尽量保持#thread 低。 std ThreadPool 表现如何?
-
SmartThreadPool 嗯?为什么要在 .net ThreadPool 上使用它完全是个谜。你能启发我吗?
-
它有一些很好的语法糖,我以前用过,没有其他原因。从未比较/研究过它如何与 .NET 本机实现相抗衡,因此现在正在将其换掉..
-
我记得好几年前的SmartThreadPool,记得它非常好。它和框架是如何保持同步的,以及在哪些情况下,我不能说。
-
而且升级框架版本并非总是不可能的,所以我认为沿着 4.0 行的答案值得包括在混合中,以及那些与 3.5 保持一致的答案。如果不出意外,他们可以帮助除 OP 之外的其他人)。
标签: c# .net multithreading .net-3.5