MOVIE server provides the MovieScript interpreter, memory management, communication and scheduling for the user level interpreted threads. Each server is carefully tuned to take advantage of a particular hardware and software characteristics on a given node. This guarantees that programs will be executed with the best possible performance. At the same time, architecture independent communication subsystem ensures information flow between local and remote user tasks. The server's scheduler controls execution of threads in a real-time, preemptive fashion.
The user programs may fully benefit from the MOVIE multithreading capabilities. Each user task is by definition a set of one or more threads of control. All threads belonging to the same task may share interpreted objects and also have an option of maintaining the private access to desired data. Tasks can only share data by inheritance and any other inter-task interaction is to be mediated by the IPC communication.
Threads are scheduled in accordance with their priorities and their internal states. Having more than one thread of execution, the programmer can better utilize an inherent concurrency in the program. It also makes the programming semantics much cleaner by the absence of any non-blocking operations. The operation which cannot be completed immediately causes the thread to block and allows another thread from that task to resume execution. Semaphore objects are used to synchronize activities of concurrent threads.
Communication between different tasks is based on a notion of unidirectional port and bidirectional channel. Ports may have only one receiving task and many sending tasks. Channels provide a two way information flow between two participating tasks. Both the communication objects can have particular characteristics imposed by the user program. This way a programmer can specify different protocol styles, thus tailoring the communication to the application needs. Since ports and channels are abstract objects, they are not hardwired to any particular architecture nor message passing protocol. This implies that they provide communication links between arbitrary sites on a global, heterogenous metacomputer.
In fact, all server constructs such as tasks, threads, messages, tasks or ports are implemented as MovieScript objects. As a consequence of this systematic object-oriented design, the computation and communication semantics is extremely powerful and clean at the same time. The equivalence between code and data, when combined with the "MovieScript Passing" based communication, makes it possible to send an executable object, which will be executed as a part of a different thread. Any given internal state of a user task can be transformed to MovieScript, sent and reinstalled on a different node server, which leads to an effortless task migration between arbitrary architectures.