C++ 线程池性能测试
我想比较一个有8个线程(8个线程,因为我的系统上有8个内核)的线程池和一些任务集的单线程池 测试1:给线程池的任务是查看一个队列(std::queue),从中获取一个整数,计算其阶乘并在屏幕上显示。所以,我在ThreadPool类中调用了500次函数addTask,并添加了500个介于1到20之间的数字。因此,并行地,整数被添加,8个线程正在挑选它们并运行以计算阶乘。线程池中已添加到队列的同步。注意将任务添加到线程池队列和全部完成500个作业之间的时间。让我们把这次称为T1 测试2:编写一个简单的阶乘函数来计算结果并显示它。运行一个简单循环500次,调用数字范围为1到20的阶乘函数。记下循环前后的时间间隔。让我们把这次称为T2 有趣的是,T2总是小于T1。这怎么可能呢 如果上面的描述不清楚,我不介意分享代码。多亏了“不确定序列”和“oakad”,上面的描述才有意义。为了总结并确保理解,我进行了以下测试,证明了您的想法:C++ 线程池性能测试,c++,multithreading,pthreads,threadpool,C++,Multithreading,Pthreads,Threadpool,我想比较一个有8个线程(8个线程,因为我的系统上有8个内核)的线程池和一些任务集的单线程池 测试1:给线程池的任务是查看一个队列(std::queue),从中获取一个整数,计算其阶乘并在屏幕上显示。所以,我在ThreadPool类中调用了500次函数addTask,并添加了500个介于1到20之间的数字。因此,并行地,整数被添加,8个线程正在挑选它们并运行以计算阶乘。线程池中已添加到队列的同步。注意将任务添加到线程池队列和全部完成500个作业之间的时间。让我们把这次称为T1 测试2:编写一个简单
如果您发现我弄错了或者需要更多的澄清,请随意添加。与线程池开销相比,计算阶乘所花费的时间微不足道。如果你也在使用任务线程进行显示,那么你的所有池线程都只是在摆弄拇指,等待访问共享资源的GUI。关于为什么“并行”不会自动暗示“快速”的一点理论:谢谢,伙计们,上面的说法是有道理的。为了总结并确保理解,我做了以下测试,证明了你的想法:1。在任务线程中,删除cout代码并添加代码,以便每次将计算出的阶乘写入新文件。由此,省略了共享资源“计算机屏幕”。这导致T1大约比T2少10倍。2.删除所有cout和文件i/o,而不是计算阶乘,在每个任务线程中运行100万次盲循环。这导致T1远小于T2。由于所有8个线程中都没有共享资源这一事实。