我想比较一个线程池和8个线程(8个线程,因为我的系统有8个核心),而不是单个线程用于某些任务。
测试1:给予线程池的任务是查看队列(std :: queue)并从中获取一个整数并计算其阶乘并在屏幕上显示它。所以500次,我在线程池类中调用了一个函数addTask,并添加了介于1到20之间的500个数字。因此,并行地,添加了整数,并且8个线程正在挑选它们并运行以计算阶乘。在线程池中添加了同步到队列。记下将任务添加到线程池队列和完成所有500个作业之间的时间。让我们把这次称为T1。
测试2:编写一个简单的阶乘函数来计算结果&显示它。循环简单循环500次,调用阶乘函数,数字范围从1到20.记录循环之前和之后的时间。让这次称为T2。
有趣的是,T2总是小于T1。怎么可能。
如果上述说明不明确,我不介意共享代码。
答案 0 :(得分:0)
感谢"不确定地排序"和" oakad",以上是有道理的。只是为了得出结论并确保理解,我跑到了测试之下,证明了你的想法:
在任务线程中,删除了cout代码并添加了代码,将计算出的factorial写入具有任意名称的新文件中。通过这个共享资源"显示到计算机屏幕"省略。这导致T1比T2小约10倍。获取锁定后,快速测试写入同一文件,由于共享资源,导致T1> T2。
删除了所有cout和文件i / o,而不是计算factorial,在每个任务线程中运行了一百万次盲循环。这导致T1远低于T2。由于这一事实,所有8个线程中都没有共享资源。
如果您发现我错误或需要更多说明,请随时添加。