java - 当涉及的所有指令都是内存 I/O 时,多线程是否比串行执行有任何优势

标签 java multithreading cpu cpu-speed

我有一个服务器,它为每个客户端的任务创建一个线程。每个线程都有访问内存(DB)的必要。因此,随着线程数量的增加,系统性能正在下降,我认为这是由于抖动造成的。在这种情况下,我是否可以假设,我不想尝试一次运行所有线程(其要求是内存 I/O)(从而导致抖动),而是希望安排它们串行运行。这样我至少不会把时间浪费在殴打上。我一次可能有多达 1000 个线程(由数千个客户端请求)。因此,请就如何提高系统的吞吐量以及在我的情况下使用线程的可行方法提出您的分析和想法。谢谢大家的期待。

最佳答案

如果他们必须写入相同的内存,那么就不会;您将不得不序列化访问,并且没有更好的办法。 但是如果它们只需要读取相同的内存,那么就没有理由不能并行化它们。此外,如果您需要写入内存中附近但不同的对象,您可能最终会获得较差的性能,因为缓存行已失效,但您可以通过将对象存储在单独的缓存中来解决此问题线。同样,组织和存储数据的巧妙技术(或有意允许读取看到陈旧数据,以便写入不需要阻止其他读取)可以带来并发优势。

关于java - 当涉及的所有指令都是内存 I/O 时,多线程是否比串行执行有任何优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332729/

相关文章:

java - jaxb可以生成这样的xml模式吗?

javascript - 如果记录已存在于jsp页面的表中,如何获取错误消息

performance - 如何获得 Intel Xeon E5-2690 GFlop/s 的峰值性能?

c++ - Win32 C++ : Get process CPU affinity?

security - Spectre 攻击如何读取它欺骗 CPU 加载的缓存?

java - 如何从 Java 小程序更新我的 MySQL 数据库?

java - 一个字符串中有多个方法?

java - 为什么在构造函数上创建新线程是不好的做法?

c++ - 我可以在一个线程中写入变量并在 C++ 中的另一个线程中读取它吗

c - 取消引用指针时的竞争条件