【发布时间】:2012-03-28 22:11:52
【问题描述】:
我只是想避免上下文切换,因为它会引入很多延迟。因此,如果我的想法正确,我希望每个处理器最多有一个线程。如果处理器支持虚拟并行(我认为是超线程!),那么我可以拥有双倍的线程数。
例如:4 个超线程处理器 = 最多 8 个线程。
当然,操作系统也需要处理器,所以我可能在这里太天真了。
无论如何,知道 JVM 在启动时创建的线程数是一个好的开始。
【问题讨论】:
-
是的,你有点天真。 GC 总是会导致一些延迟,不管你有多少 CPU,尽管一些 GC 算法可以在多处理器系统中减少它。如果您想要保证低延迟,请避免使用 Java。 (最好是所有非实时操作系统。)
-
稍微偏离主题,因此发表评论。 “所以如果我的想法是正确的,我希望每个处理器最多有一个线程”这实际上并不像你想象的那么好,除非你的线程将一直 100% 工作并且永远不会锁定,等待 I/O或其他任何东西。当然你不应该过度使用它,但在大多数情况下,试图将线程数保持在与内核或硬件线程数一样低的结果只是不会让你充分利用 CPU。
-
“我只是想避免上下文切换,因为它会引入很多延迟”。可以?你量过吗?
-
@EJP - 是的,上次我查看时,上下文切换是为了减少延迟,(好吧,IO 延迟,无论如何)。
标签: java multithreading concurrency parallel-processing real-time