Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当涉及的所有指令都是内存i/o时,多线程比串行执行有什么优势吗_Java_Multithreading_Cpu_Cpu Speed - Fatal编程技术网

Java 当涉及的所有指令都是内存i/o时,多线程比串行执行有什么优势吗

Java 当涉及的所有指令都是内存i/o时,多线程比串行执行有什么优势吗,java,multithreading,cpu,cpu-speed,Java,Multithreading,Cpu,Cpu Speed,我有一个服务器,它为每个客户端的任务创建一个线程。每个线程都需要访问内存(DB)。因此,随着线程数量的增加,系统性能正在下降,我想这是因为抖动。在这种情况下,我是否可以假设,与其尝试一次运行所有线程(其需求是内存I/o)(从而导致抖动),不如安排它们以串行方式运行。这样我就不会再浪费时间了。我一次可能有大约1000个线程(由1000个客户端请求)。因此,请务必将您的分析和想法放在如何提高系统吞吐量以及在我的情况下使用线程的可行方式上。谢谢大家的期待。如果他们必须写相同的记忆,那么就不要了;您必须

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

如果他们必须写相同的记忆,那么就不要了;您必须序列化访问,没有更好的方法可以做。但是如果它们只需要读取相同的内存,那么就没有理由不能并行化它们。此外,如果您需要写入内存中附近但不同的对象,可能会因为缓存线无效而导致性能低下,但您可以通过将对象存储在单独的缓存线中来解决这一问题。同样,组织和存储数据的巧妙技术(或有意允许读取查看陈旧数据,以便写入不需要阻止其他读取)也可以带来并发性好处。

@Michel,你所说的巧妙技术是什么意思。建议几个名字。几乎所有“最终一致”的数据库。。。查找BIgTable、Cassandra、NoSql等。另外,无锁但强一致性的数据库是另一个例子;在扳手上读。如果我使用不同的数据库进行读写,会有什么好处吗(我认为不会,因为所有不同的数据库都驻留在同一个内存中)?你觉得呢?你说的“相同的记忆”是什么意思?同一个内存芯片可以处理并行读写。只有在讨论相同的确切内存地址或相同的缓存线时,您才会遇到问题。