2

Java 在 PriorityQueue 对象的实现中使用了 Heap。实现(通过 Java)是否在 poll() 操作(例如,通过另一个线程)之后并行“heapify”操作?

提前致谢。

4

2 回答 2

3

heapify 操作一次只考虑一个元素,将其下沉或筛选。我不知道可以并行化的方式。

仍然,如果您想确定为什么不看一下代码?

编辑:我现在确定至少对于openjdk 的实施

于 2013-02-07T09:47:46.670 回答
1

不,它不会并行化它。该算法不是那样设计的。

此外,请考虑到,由于您必须等待整个操作完成,因此只有在计算机必须等待的重要代码块(例如检索网页)的情况下,您才能从多线程中获得优势. 由于堆显然不是这种情况,因此没有任何好处。

还有一件事:每当包含多线程时,也需要付出代价:维护变得更加复杂,线程实例化和锁管理花费了 CPU 时间等等......

在这种情况下,它无济于事。另一个问题是,如果您想要一个需要在多台计算机上分布式工作的数据结构,在这种情况下,必须开发一个分布式变体,但前提是并行化的好处超过了分发数据所涉及的开销。

于 2013-02-07T09:53:13.067 回答