Current Approaches As Of August 2007

  1. The conventional multithreading where the programmer writes all the controls for the threads and how they share and don't share data, in the hope of optimizing resources (e.g., threads, memory, communication).

  2. New multithreading techniques, some usable, some in dev, where the programmer does not have to write all the controls for the threads and how they share and don't share data, and yet resources are still optimized.

    1. The most promising technique is TM - not Transcendental Meditation - but Transactional Memory, where the CPU (instruction set), OS, and VM are designed to make all accesses to the RAM work somewhat like transactional access to a database.
      Sun will be including TM in it's Rock processor due near the end of 2008.

    2. X10 - an extension of Java - in development - IBM is a main contributor.

  3. Grid-for-Concurrency frameworks that allow at least some sharing of data between threads:

    1. Fork-Join Frameworks:

      1. The most popular is Google's MapReduce.

      2. TODO - more fork-join examples

    2. The Appistry Grid where the programmer writes single-threaded logic and the underlying system takes care of managing the available resources (threads and memory).

    3. TODO other grid (for concurrency) examples.

  4. Java EE - A great multithreading platform, particularly the EJB containers. The extra seconds in http request processing are worth it when considering the difficulties in developing robust, mission-critical multithreaded apps and the reduction in costs that Java EE makes possible for such apps.

    UPDATE 2007.10.13: memory leaks occurring when using a ThreadLocal in certain situations maybe reducing Java EE's advantage for safe multithreading.

Labels: , , , , , , , , , , , , , , ,