Action Chunking

Bad code:

 thread do
   worker = Worker.new
   for x = 0 to max
     worker.do_item(x)
   end
 end

Good code:

 worker = Worker.new
 timer do
   if worker.fetch_next_item
     worker.do_current_item
   else
     stop_timer
   end
 end

The latter is an example of ActionChunking. The worker object is more EventDriven. It maintains its own current index, and does not rely on an external loop statement to maintain its current state.

To avoid PrematureConcurrency, if you think you must thread, always try action chunking first (or try selecting from an array of mutex semaphores!). If you then prove you need a thread (per ConcurrencyVsXp), you will probably be better off using the action-chunked version of the design:

 thread do
   worker = Worker.new
   while worker.index < worker.max
     worker.do_current_item
   end
 end

One common (bad) tutorial example of threading is hiding a long process from a GUI. In many situations, the ActionChunked version is more flexible, using the GUI's timer facility for its pump. Such a process is very easy to upgrade with a


EditText of this page (last edited August 12, 2008) or FindPage with title or text search