请关注我的微信公众号
个人微信公众号
技术交流群 (仅作技术交流):642646237
请关注我的头条号:
使用本地变量优化过度竞争
消费者对counts有一些不必要的竞争。
与其所有消费者都共享同一个counts,不如每个消费者各自维护一个计数map,再对这些计数map进行合并。
代码
建立了一个相对复杂的生产者-消费者程序,多个消费者通过一个并发队列和一个并发map进行协作,程序中没有显式地使用锁,而是使用了标准库提供的并发工具。
采用此方法只是减少了对counts的竞争的频率,并没有彻底消除掉。
在最后合并localCounts到counts中的时候,还是有一定几率会发生过度竞争。
并发程序性能与线程数的关系
并行程序起初性能快速线性增长,之后增长趋势放缓,最终性能达到极值,线程数再增加性能则会下降。