线程池性能测试

Thread pool performance test

本文关键字:性能测试 线程      更新时间:2023-10-16

我想比较有8个线程的线程池(8个线程,因为我的系统上有8个内核)和单线程的一些任务集。

Test 1:线程池的任务是查看队列(std::queue)并从中获取一个整数,计算它的阶乘并显示在屏幕上。因此,我在线程池类中调用了函数addTask 500次,并添加了500个介于1到20之间的数字。所以在并行中,整数被添加,8个线程选择它们并运行来计算阶乘。线程池中已添加队列同步。注意将任务添加到线程池队列和所有500个作业的总完成之间的时间。我们设这个时间为T1。

测试2:写一个简单的阶乘函数来计算结果&显示它。运行一个简单的循环500次,调用阶乘函数,其数字范围从1到20。记录了循环前后的时间。我们称这个时间为T2。

有趣的是,T2总是小于T1。这怎么可能。

我不介意分享代码,以防上面的描述不清楚

多亏了"不确定排序"answers"oakad",上述内容才有意义。为了总结和确保理解,我进行了以下测试,证明了您的想法:

  1. 在任务线程中,删除了计算代码,并添加了将计算的阶乘写入任意名称的新文件的代码。这样就省去了共享资源"显示到计算机屏幕"。这导致T1大约比T2小10倍。我做了一个快速的测试,在获得锁后写入同一个文件,这导致T1>T2,由于共享资源。

  2. 删除所有的cout和文件i/o,而不是计算factorial,在每个任务线程中运行一百万次盲循环。这导致T1远小于T2。由于8个线程中没有共享资源

如果你发现我错了,或者需要更多的说明,请随时补充。