Java 如何有效地实现多线程

Java 如何有效地实现多线程,java,multithreading,architecture,Java,Multithreading,Architecture,我正在编写一个异步程序,我有两个选择: A) 在一个内核上运行线程会失去并行处理的优势 B) 在不同的内核上运行线程,并且存在潜在的延迟问题(内核必须相互通信) 更好的选择是什么?我最好不要担心它,让操作系统来决定,还是使用上面的选项可以获得更高的性能?A)如果有阻塞操作,就不一定会失去并行性。不过,您确实说过“异步”,所以您可能没有阻塞。线程调度程序将在一个线程阻塞时调度其他线程运行 B) 这都是毫无意义的;Java没有线程关联性,所以您甚至没有选择。操作系统可以选择使用哪些内核。线程间通信的

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

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

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

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

A)如果有阻塞操作,就不一定会失去并行性。不过,您确实说过“异步”,所以您可能没有阻塞。线程调度程序将在一个线程阻塞时调度其他线程运行

B) 这都是毫无意义的;Java没有线程关联性,所以您甚至没有选择。操作系统可以选择使用哪些内核。线程间通信的延迟很低——最多可能为100ns。这实际上只是线程之间频繁通信的问题

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


综上所述,您应该阅读更多关于并发模式和Java的内容。如果您错误地实现了A或B,那么性能可能会非常糟糕,因此如果您想要避免主要的哥特卡问题,您需要深入了解发生了什么。Java并发在实践中是一本很好的读物。

天哪,今天同样的问题是什么。不可能给出一个好的一般性答案,因为它会随着问题的不同而变化,甚至会随着同一问题的不同而变化。