我有一个多线程应用程序。我可以设置要运行的线程数(简单数据并行)。尝试使用超过4个线程运行它时,我发现性能显着下降。 Profiler显示了__lll_unlock_wake
和__lll_lock_wait
消耗的大量时间,分别由_L_unlock_532
和_L_lock_926
调用。我怀疑堆操作是否锁定,因为每个线程都会分配并释放大量数据。
问题是,任何经过测试的探查器(perf,google的pperf)都不会显示调用者_L_lock_926
以上,所以我无法检查我的函数是否导致此锁定。我想使用一些内存池技术来减少堆操作的数量,但我不想在每个数据集合上执行此操作。有没有办法增加此函数的调用堆栈深度?
预期建议:
fork()
,因为我的应用也需要在Windows上运行