我一直在使用已Linked List
实现ArrayList
将我的数据存储在Java
. 它非常大,我将它划分为几个区域,使用subList
并将其发送到不同的处理器创建线程进行处理。我的系统中有 80 个内核,我现在正在创建 20 个线程。每个线程必须处理数百万个实例中的至少一百万个实例。数据被划分为:
List<List<Integer>> totalInstances = new ArrayList<List<Integer>>();
//fill the data in totalInstances
List<List<Integer>> instanceSet1 = totalInstances.subList(index1,index2);
List<List<Integer>> instanceSet2 = totalInstances.subList(index2,index3);
....................
等等。我已经创建了这样的 20 个集合。处理几乎是不同步的。有一些同步,但似乎很少出现。这只是在这个数据集中发生的读取操作。我没有加入从子列表中读取每个示例的步骤。线程仅在读取其相应实例列表中的所有实例后才同步以进入下一个加入。即使这样我在处理过程中也会出现一些暂停。当每个线程读取一个实例时会发生这种情况,它们会等待一段时间并读取另一个线程。这可能是什么原因?
- 是因为使用链表吗?
- 我正在打印每个线程访问的实例。我听说该
I/O
操作阻碍了多线程进程。 - 任何适合它的数据结构?
- 任何用于查找性能障碍的调试工具?
提前致谢