next up previous contents
Next: Communication in Java Up: Issues Previous: Issues   Contents


Approaches to Parallelism in Java

Java already supports concurrency through the thread mechanism and monitor synchronization built into the language. In this dissertation we are more interested in truly distributed parallel computation, involving multiple CPUs. Such parallelism could be introduced into Java in a number of ways.

It could be achieved through automatic parallelization of sequential code, but it is unclear why this easier for Java than for other languages. Alternatively, the Java virtual machine for a shared memory multiprocessor can schedule the threads of a multi-threaded Java program on different processors. For computation on a network (or distributed memory computer) realistic options include language extensions or directives akin to HPF, or provision of libraries--class libraries--to support task parallelism or data parallelism.

A popular approach in C++ has been to defer language extensions and concentrate on class library support for parallel programming. The similarities between the two languages suggest this may be a fruitful avenue in Java too. The success of this analogy is by no means automatic, however. Features such as templates and user-defined operator overloading make the C++ language more customizable than Java. In C++ library-defined types can be used on an identical footing to primitive types--inline methods mean they can be almost as efficient as primitive types. Less importantly, but conveniently, new control constructs can often be simulated in C or C++ through use of macros. On grounds, presumably, of simplicity and transparency many of these features have been omitted from Java.

Such caveats notwithstanding, this dissertation will concentrate on class libraries rather than language extensions. We have been working with class libraries implemented in the standard Java development environment.

Another open question is how multiple interacting Java tasks are to be initiated. Conventionally in network computing, instructions to execute a particular user task are sent to a specialized daemon or secure server running on the target host. Alternatively standard operating system daemons (rshd, rexecd, ...) can be used to the same effect. Java brings some options of its own. One is to use standard or enhanced Web servers to execute Java byte-codes. This approach is predicated on the existence of cooperative servers, probably running suitable CGI scripts. Another option is to exploit Java-enabled browsers. Applets downloaded from a particular server can perform computations and return the results to that server. In any case the substantive improvement over conventional network computing is that the byte-codes can be downloaded on the fly to target hosts, even in heterogeneous networks. Conventionally, it was often necessary to install and compile an application on each target host before starting the task remotely.


next up previous contents
Next: Communication in Java Up: Issues Previous: Issues   Contents
Bryan Carpenter 2004-06-09