如何有效地进行多线程

乔希

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

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

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

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

大卫·埃尔曼(David Ehrmann)

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

B)这一切都没有意义;Java没有线程关联性,因此您什至没有选择。操作系统可以选择使用哪个内核。您在线程之间进行通信时的等待时间很短-最多为100ns。这实际上只是线程之间相互通信很多的问题。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何有效地在多线程程序中读取共享数据?

如何在Python网络机器人中有效地实现多线程/多处理?

如何有效地进行多个“不是”过滤

如何有效地对这个列表进行排序?

如何有效地对 numpy 矩阵进行排序

我如何有效地进行亲子配对?

如何有效地进行多次随机试验?

如何有效地进行多次MongoDB旅行

如何有效地语法

如何最有效地从多个线程访问共享文件?

如何在线程安全的C库中有效地实现句柄

如何有效地阻塞线程直到满足特定条件

如何有效地对对象进行分组并为每组对象进行计算

有效地对numpy数组进行降序排序?

熊猫:有效地对列名进行大量修改

有效地对元组列表进行分组

有效地在JSONB数组上进行聚合

有效地在多个类别之间进行选择

如何在Rails中有效地对模型进行评分并获取其平均评分

如何进行排列以有效地调整输出

如何有效地对跨数据帧的乘法进行配对

如何有效地进行滤波以获取单元格的值

如何有效地进行数据整理以实现excel流程的自动化?

如何有效地执行floor()和ceil()操作以进行三元搜索?

如何安全有效地使用AtomicReference进行惰性创建和设置?

如何在python中有效地对列表进行分类

如何在Unity中有效地对很多RGB颜色进行排序

如何有效地将 Accesss SQL 结果与 SQL Server 结果进行比较?

如何有效地对“ vectorize”函数进行cythonize(numpy库)-python