问题描述
如何为默认(公用)fork-join池中的每个工作线程设置一些线程本地存储,以及如何从主线程访问该TLS?
我需要为Java并行流实现“收集器”模式,这类似于MapReduce中的reduce,但是在最后一个最后的归约步骤之前,对每个线程中分组的关联操作进行了部分归约。 (请注意,出于性能原因,我不想直接使用MapReduce模式-收集器减少了从映射器发送给reducer的数据量。)
基本上,我需要公共fork-join线程池中的每个线程都具有与之关联的大量累加器,并且当映射器使用Stream.parallel().forEach(...)
运行时,每个线程应通过更新某些bin来收集结果值在自己的蓄能器中以无锁方式运行。在操作结束时,我希望调用线程(主线程)可以从每个工作线程访问累加器,以便它可以做最后的归结,将所有累加器组合成一个累加器数组。
我的想法是使用一个按线程名称索引的concurrentskiplistmap
来存储每个线程本地累加器,但是这样做有很多开销,因此并不理想。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)