Jak*_* M. 2 c++ multithreading openmp
我应该如何new 在多线程环境中使用?
确切地说:我有一段代码,我用40个线程运行.每个线程调用new几次.我注意到性能下降,可能是因为线程锁定new(花费大量时间__lll_lock_wait_parallel和__lll_unlock_wait_parallel).什么是new/ delete我可以使用的最佳替代品?
有关:
即使您使用的是new运算符,它也可以使用malloc下面的方法来进行分配和释放.重点应放在分配器上,而不是在这些情况下用于达到它的API.
TCMalloc是在Google创建的malloc,专门用于在多线程环境中获得良好性能.它是google-perf-tools的一部分.
你可能会看到的另一个malloc是Hoard.它与TCMalloc有很多相同的目标.
我不知道"最好的",但我会尝试一些事情:
减少分配/释放的频率(可能很难).如果它提高了性能,就浪费内存(但不要泄漏)
滚动我自己的每线程分配器,并始终使用相同的线程分配/释放mmap 实际内存
要滚动自己的原始分配器:
mmap从操作系统获取大量内存我不认为这是微不足道的,但如果做得好,它可以提高性能.最毛茸茸的部分是到目前为止跟踪分配,防止碎片等.
在本书末尾的" C编程语言 "中提供了一个简单的实现(但它使用了brkIIRC).