úterý 17. července 2007

Rozšíření concurrency frameworku

Doug Lea poodhalil informace o připravovaných vlastnostech pro concurrency framework pro Javu 7. Velice zajímavě vypadá takzvaný Fork/Join framework. Představte si úlohu, kterou budete chtít řešit paralelně po jednotlivých částech a z jejich výsledků složit výsledek konečný. Pro tyto typy úloh bude sloužit právě Fork/Join framework.

Níže uvedený pseudokód ilustruje využití Fork/Join frameworku pro řešení problému jež lze paralelizovat.


Result solve(Problem problem) {
  if (problem is small)
    directly solve problem
  else {
    split problem into independent parts
    fork new subtasks to solve each part
    join all subtasks
    compose result from subresults
  }
}

Doug Lea mluvil v souvislosti s Fork/Join frameworkem o výkonnostním přínosu na více jádrových systémech, které se budou stávat stále častějšími.

Big (32+) multicores will be coming out in volume during the lifetime of Java 7, and having this framework in place will allow people running them to get relatively simple speedups for computation-intensive tasks. Right now, forkjoin works best on machines like Sun Niagaras and Azuls, which are the only current processors of the form that will soon be common. It also works well on standard SMPs. In general, you don't get many speedup benefits with less than 4 processors though -- the main targets are in the dozens to hundreds of processors range.