我正在写一个异步程序,我有两个选择:
A)在一个核心上运行线程并失去并行处理优势
B)在不同核心上运行线程并且存在潜在的延迟问题(核心必须相互通信)
什么是更好的选择?我最好不要担心它并让os决定,或者我可以通过上面的选项获得更多的表现吗?
答案 0 :(得分:1)
A)如果你有阻止操作,你不一定会失去并行性。你确实说过#34;异步,"但是,你可能不会阻止。线程调度程序将安排其他线程在阻塞时运行。
B)这一切都没有实际意义; Java没有线程亲和力,因此您甚至无法做出选择。操作系统可以选择它使用的核心。线程之间进行通信时的延迟很低 - 最多可能为100ns。这实际上只是线程之间相互沟通的问题。
听起来您真正想知道的是,您仍然可以看到具有异步操作的多个线程的性能优势。是的,你可以。
所有这些都说明了,你应该阅读有关并发模式和Java的更多信息。如果你不正确地实现A或B,性能可能会很糟糕,所以如果你想避免主要的问题,你需要深入了解正在发生的事情。 实践中的Java并发对于这样的事情是一个很好的阅读。