我的Java程序应使用多少个线程?

我的Java程序应使用多少个线程?,第1张

我的Java程序应使用多少个线程

线程很好,但正如其他人指出的那样,您必须高度了解瓶颈。您的算法听起来很容易受到多个CPU之间的缓存争用的影响-
这特别令人讨厌,因为它有可能影响所有线程的性能(通常您会考虑使用多个线程来继续处理,而等待缓慢或繁忙延迟IO *** 作)。

高速缓存争用是使用多个CPU处理高度并行化算法的一个非常重要的方面:确保将内存利用率考虑在内。如果可以构造数据对象,以便每个线程都有自己的内存在运行,则可以大大减少CPU之间的缓存争用。例如,拥有一个较大的int数组并在该数组的不同部分上使用不同的线程可能会更容易-
但是在Java中,对该数组的边界检查将试图访问内存中的相同地址,可能导致给定的CPU必须从L2或L3缓存中重新加载数据。

将数据拆分成自己的数据结构,然后配置这些数据结构,使其成为线程局部的(使用ThreadLocal可能更为理想
-实际使用OS中的构造可提供保证CPU可以用来优化缓存的构造。

我能给您的最好的建议是测试,测试,测试。不要对CPU的性能做任何假设-如今,CPU中发生了 很多
不可思议的事情,通常会产生违反直觉的结果。还要注意,JIT运行时优化将在此处增加一层额外的复杂性(可能不错,也可能不好)。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5487082.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存