线程池性能测试
Thread pool performance test
我想比较有8个线程的线程池(8个线程,因为我的系统上有8个内核)和单线程的一些任务集。
Test 1:线程池的任务是查看队列(std::queue)并从中获取一个整数,计算它的阶乘并显示在屏幕上。因此,我在线程池类中调用了函数addTask 500次,并添加了500个介于1到20之间的数字。所以在并行中,整数被添加,8个线程选择它们并运行来计算阶乘。线程池中已添加队列同步。注意将任务添加到线程池队列和所有500个作业的总完成之间的时间。我们设这个时间为T1。
测试2:写一个简单的阶乘函数来计算结果&显示它。运行一个简单的循环500次,调用阶乘函数,其数字范围从1到20。记录了循环前后的时间。我们称这个时间为T2。
有趣的是,T2总是小于T1。这怎么可能。
我不介意分享代码,以防上面的描述不清楚
多亏了"不确定排序"answers"oakad",上述内容才有意义。为了总结和确保理解,我进行了以下测试,证明了您的想法:
-
在任务线程中,删除了计算代码,并添加了将计算的阶乘写入任意名称的新文件的代码。这样就省去了共享资源"显示到计算机屏幕"。这导致T1大约比T2小10倍。我做了一个快速的测试,在获得锁后写入同一个文件,这导致T1>T2,由于共享资源。
-
删除所有的cout和文件i/o,而不是计算factorial,在每个任务线程中运行一百万次盲循环。这导致T1远小于T2。由于8个线程中没有共享资源
如果你发现我错了,或者需要更多的说明,请随时补充。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在main()之外初始化std::vector会导致性能下降(多线程)
- MS 本机单元测试 - 断言::线程失败不起作用
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- 使用 std::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 多个 OpenMP 线程读取(而不是写入)共享变量的性能成本?
- Linux VM(重型多线程应用程序)的性能改进
- 如何修复macOS线程互斥锁性能缓慢的问题?
- 为什么我不能编译这个简单的线程测试?
- 线程池的计时测试:单线程 vs 回调 tp vs 未来 tp
- 使用较新版本的 g++ 导致多线程性能下降?
- 为什么在某些特定情况下具有多个线程(并行处理)会降低性能
- 在多线程环境中使用 libcurl 会导致与 DNS 查找相关的性能非常慢
- 线程会影响树莓派的图像处理性能吗?
- C++多线程性能比单线程代码慢
- 提升 asio io_service多线程性能不佳
- 对线程性能进行基准测试
- PC多线程性能和稳定性问题的简单基准测试.如何使每个线程在单独的核心上运行
- 线程池性能测试
- 为什么OpenMP的性能优于线程