我们正在将多进程应用程序移植到多线程体系结构中。我们在Windows上运行相同的应用程序,并且性能非常高。
对于Linux,我们使用的是pthread库。为了避免内存争用,我们有自定义堆,每个线程都有自己的堆。我们正在使用mspace进行此自定义堆实现。但问题是这种方法会导致很多性能开销。与原生malloc相比,mspace内存分配非常慢。这是瓶颈。我们尝试了Hoard分配器,但情况要糟糕得多。
性能影响归因于: 1. CPU切换:我看到LWP中的切换比正常的多进程更多 2.内存分配:我看到mspace占用的时间比普通malloc多7到8倍
是否还有其他方法可以实现多堆,这在Linux中也具有高性能?