【问题标题】:How to multithread effectively如何有效地进行多线程
【发布时间】:2014-10-25 04:48:07
【问题描述】:

我正在编写一个异步程序,我有两个选择:

A) 在一个内核上运行线程并失去并行处理优势

B) 在不同的内核上运行线程并存在潜在的延迟问题(内核必须相互通信)

什么是更好的选择?我最好不要担心它并让操作系统来决定,还是我可以通过上面的选项获得更高的性能?

【问题讨论】:

  • 天哪,今天有同样的问题。不可能给出一个好的通用答案,因为它会因问题而异,甚至会因同一问题的实例而异。

标签: java multithreading architecture


【解决方案1】:

A) 如果你有阻塞操作,你不一定会失去并行性。不过,您确实说过“异步”,因此您可能不会阻塞。当一个线程阻塞时,线程调度器会调度其他线程运行。

B) 这一切都没有实际意义; Java 没有线程亲和性,所以你甚至没有选择的余地。操作系统可以选择它使用的内核。当你在线程之间通信时的延迟很低——最多可能是 100ns。这实际上只是线程之间经常通信的问题。

听起来您真正想知道的是,您是否仍然可以看到具有异步操作的多线程带来的性能优势。是的,你可以。

综上所述,您应该阅读有关并发模式和 Java 的更多信息。如果您错误地实现 A 或 B,性能可能会很糟糕,因此如果您想避免主要问题,您需要深入了解正在发生的事情。 Java Concurrency in Practice 是一本很好的读物。

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2019-02-27
    相关资源
    最近更新 更多