Multithreading 应用程序中的最佳线程数应该是多少?

Multithreading 应用程序中的最佳线程数应该是多少?,multithreading,operating-system,Multithreading,Operating System,我的应用程序仅在Oracle DB上激发SELECT查询。我有多个模式,并且我有一个线程可以从每个模式中读取。每个线程创建自己的连接以连接到DB 当我运行三个测试时,我发现8-10个线程的性能最好,之后在单核机器上性能会下降。有人知道这有什么原因吗?对此没有一般规则或简单的数学公式。通常最好是每个核心一个线程,但这取决于具体情况。唯一的方法是测试你的应用程序。在您的情况下,单核计算机上有8-10个线程是不好的,这些线程将花费更多的时间相互处理,而不是进行实际工作。您的数据库方案后端有多少磁盘?后

我的应用程序仅在Oracle DB上激发SELECT查询。我有多个模式,并且我有一个线程可以从每个模式中读取。每个线程创建自己的连接以连接到DB


当我运行三个测试时,我发现8-10个线程的性能最好,之后在单核机器上性能会下降。有人知道这有什么原因吗?

对此没有一般规则或简单的数学公式。通常最好是每个核心一个线程,但这取决于具体情况。唯一的方法是测试你的应用程序。在您的情况下,单核计算机上有8-10个线程是不好的,这些线程将花费更多的时间相互处理,而不是进行实际工作。

您的数据库方案后端有多少磁盘?后端只有一个磁盘如果线程是io绑定的,在这里有几个线程是有意义的。@AlexandreC。非常同意。是的。我将查询结果写入一个文件。当我使用一个线程时,需要10秒。使用2个线程8秒,使用5个线程4秒,使用8个线程3秒。在那之后,它又开始增加。我认为这是因为达到了一个阈值之后,上下文切换失去了它的优势。[正如尤金正确地说]每个CPU一个线程可能不是一个有用的指导方针,因为操作系统不能保证每个线程都在一个单独的核心上运行。