我正在使用jdk 7的新forkjoin框架。 我得到一个任务,它必须用不同的参数多次执行。使用jdk 7的新fork连接框架的性能问题
此任务延伸RecursiveTask
。有超过100个任务可以执行,可以同时执行。任务是独立的,所以不需要任何同步。 因此,我首先创建了所需的任务,并将它们传递给forkjoin线程池。 但是应用程序变得比较慢,没有任何并行性运行它。
我的第一个想法是,我创造了很多线程..这就是为什么我试图回收线程以减少对象创建开销,但这对性能没有影响。用于使用reinitialize()方法回收即时消息。再循环性能比没有任何并行性运行性能要慢。
在任务中执行的操作不是微不足道的,运行线程的持续时间从5到150毫秒。该应用程序运行在双核机器上,使用ubuntu和oracle jdk 7运行。
你有没有建立一个简单的程序,简单地派生一个任务,并等待其完成,与线程做零工作,得到上下文切换时间的感觉?你知道那些时代是什么吗? – 2012-08-04 15:19:44
...你会注意到与2个处理器,你的加速是至多2倍。你确定你需要100个独立的任务? – 2012-08-04 15:21:00
我会尝试你的第一个评论:)如上所述,即时通讯不再使用100个独立的线程。我创建了一个固定数量的线程,这些线程是延伸RecursiveTask的对象,如许多示例中所示。 2.之后,我设置这些对象的参数并将它们传递给池,以便同时运行。之后,我重新设置参数,只要元素可用,必须执行任务。 –
lunatikz
2012-08-04 15:29:52