Java中的并行性

Kam*_*ire 4 java parallel-processing concurrency java.util.concurrent

是否有像Java中的Intel TBB这样的库支持Parallelism.

Pet*_*rey 8

也许你可以澄清你究竟在寻找什么

英特尔®线程构建模块(英特尔TBB)提供了丰富而完整的方法来表达C++程序中的并行性.它是一个库,可帮助您利用多核处理器性能,而无需成为线程专家.英特尔TBB不仅仅是一个线程替换库.它代表了一种更高级别的基于任务的并行性,它将平台细节和线程机制抽象为可伸缩性和性能.

这是自1998年以来并发库所做的,并且在2004年成为Java 5.0的一部分.

编辑:假设您想要一个可以使用系统上所有逻辑处理器的线程池.

ExecutorService es = Executors.newFixedThreadPool(
      Runtime.getRuntime().availableProcessors);

// to add a number of tasks
for(int i=0; i<numberOfTasks; i++) {
   es.submit(new Callable<ResultType>() {
      public ResultType call() {
          return doWork(i);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

这将在每个免费线程上执行doWork.

看看它的功能,它们看起来非常熟悉.

我看了一些低级优化,比如线程感知内存分配.在Java中,这称为TLAB(线程本地分配缓冲区)并且是透明的.我怀疑大多数Java开发人员甚至不知道它们存在.

在Future对象中捕获结果和异常,您可以稍后检查.

您可以拥有"条件变量",例如CountdownLatch或CyclicBarrier

一个模仿C++ 0x unordered_map并基于英特尔(TBB 3.0)和Microsoft(Visual Studio 2010)实现的联合规范的新容器.它比以前的concurrent_hash_map有三个优点:

  • 一个非常类似于C++ 0x unordered_map的接口
  • 它允许并发插入和遍历.
  • 接口不会暴露锁定.实现可以在内部使用锁,但锁定永远不会以可能导致死锁的方式暴露.它可能在内部持有锁,但从不在调用用户定义的代码时.

Java的ConcurrentHashMap支持ConcurrentMap和Map接口,允许并发插入和遍历,并且不暴露任何锁.;)至少9岁,所以你知道它应该是健壮和稳定的.

如果您愿意,可以在线程池中使用PriorityQueue.


Eko*_*edy 6

这个主题有一本好书:

Java Concurrency in Practice
Run Code Online (Sandbox Code Playgroud)

Java并发实践