我正在编写一个异步程序,我有两种选择:
A)在一个内核上运行线程并失去并行处理优势
B)在不同的内核上运行线程,并有潜在的延迟问题(内核必须相互通信)
有什么更好的选择?我最好不要担心它,让操作系统决定它,还是可以通过使用上面的选项来获得更高的性能?
A)如果您有阻塞操作,则不一定会失去并行性。但是,您确实说过“异步”,因此您可能不会阻塞。线程调度程序将调度其他线程在阻塞时运行。
B)这一切都没有意义;Java没有线程关联性,因此您什至没有选择。操作系统可以选择使用哪个内核。您在线程之间进行通信时的等待时间很短-最多为100ns。这实际上只是线程之间相互通信很多的问题。
听起来您真正想知道的是,您仍然可以从具有异步操作的多个线程中看到性能优势吗?是的你可以。
综上所述,您应该阅读有关并发模式和Java的更多信息。如果您错误地实现了A或B,则性能可能会很糟糕,因此,如果您要避免遇到主要问题,就需要对发生的事情有深刻的了解。Java Concurrency in Practice对于此类事情是一本好书。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句