gpt4 book ai didi

Java多线程性能

转载 作者:行者123 更新时间:2023-12-01 18:14:57 24 4
gpt4 key购买 nike

所以我一直在研究 Java 中的线程并做了一个测试。我编写了一个程序,可以进行大约 10^9 次乘法,然后打印所需的毫秒数。

该程序有两种模式,其中一种不打印任何内容,只打印所需的毫秒数。然而,另一种模式每次乘以一个数字时都会打印出“It's done”。

在第一种模式下,1 个线程的结果很好,我得到了 8270 毫秒的结果,当我使用 8 个线程时,我得到了 2237 毫秒的结果(我正在 8 核计算机上进行测试)。

在第二种模式下,1 个线程的结果是 94 054 毫秒,8 个线程的结果是 96 430 毫秒。

我的问题是为什么第二种模式下 8 线程的性能并不比 1 线程更好?我猜这是因为你不能在终端中同时打印两件事,所以有一个队列,这就是原因,但这只是一个猜测。

最佳答案

此类问题的关键分析工具是 Amdahl's Law ,它给出了基于严格串行工作部分的并行性加速的上限。如果 n 是线程数,B 是严格串行工作的比例,T(n) 是使用 n 个线程的时间:

T(n) = T(1)(B + (1-B)/n)

假设添加输出所增加的时间大部分是串行的,我们的 B 约为 0.9。

T(8) = 94054(0.9 + 0.1/8)
= 85824.275

这是时间的下限。实际上,8 个线程相互争夺同一个锁所浪费的时间相当于同一个小厨房里 8 个厨师煮一道菜所浪费的时间。

关于Java多线程性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30225189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com