In many parallel programs, each process has a single thread of control: they have a single stack and a single set of registers. However many complex programs are difficult to express in a single threaded manner. This is particularly true for programs that involve asynchronous events, or when it is necessary to overlap computation and communication. In thread-based programs, there are multiple threads of control, with the scheduler switching between threads to enable maximum utilization of processor resources and to ensure progress.
A threads package typically consists of three components: A mechanism to suspend the execution of a running thread and resume the execution of a previously suspended thread; A scheduler that manages the transfer of control among the threads; and concurrency control mechanisms. Many thread packages and standards have been developed in the past few years [36,59,53]. However, the gluing together of scheduling, concurrency control and other features with the mechanisms to suspend and resume threads is problematic for the requirements of interoperability. E.g. the particular scheduling strategy provided by the threads package may not be appropriate for the problem at hand. Converse separates the capabilities of thread packages modularly [45]. In particular, it provides the essential mechanisms for suspending and resuming threads as a separate component, which can be used with different thread schedulers and synchronization mechanisms, depending on the requirements of the parallel language or application.