线程很好,但正如其他人指出的那样,您必须高度了解瓶颈。您的算法听起来很容易受到多个CPU之间的缓存争用的影响-
这特别令人讨厌,因为它有可能影响所有线程的性能(通常您会考虑使用多个线程来继续处理,而等待缓慢或繁忙延迟IO操作)。
高速缓存争用是使用多个CPU处理高度并行化算法的一个非常重要的方面:确保将内存利用率考虑在内。如果可以构造数据对象,以便每个线程都有自己的内存在运行,则可以大大减少CPU之间的缓存争用。例如,拥有一个较大的int数组并在该数组的不同部分上使用不同的线程可能会更容易-
但是在Java中,对该数组的边界检查将试图访问内存中的相同地址,可能导致给定的CPU必须从L2或L3缓存中重新加载数据。
将数据拆分成自己的数据结构,然后配置这些数据结构,使其成为线程局部的(使用ThreadLocal可能更为理想
-实际使用OS中的构造可提供保证CPU可以用来优化缓存的构造。
我能给您的最好的建议是测试,测试,测试。不要对CPU的性能做任何假设-如今,CPU中发生了 很多
不可思议的事情,通常会产生违反直觉的结果。还要注意,JIT运行时优化将在此处增加一层额外的复杂性(可能不错,也可能不好)。



