The basic intuition behind co-scheduling [1], where processes of the same job are scheduled in the respective processors at the same time, is that communicating processes are ready to respond to messages, which thus ensure that messages are served as soon as they are received. This is an advantage in tightly coupled systems, where the message transmission latencies are low. As a consequence, not only the overhead of context switch is avoided, but also a process that is awaiting a message can be released quickly.
However, with the emerging distributed environments for processing parallel workloads, the above technique may not be best suited. The implicit scheduling [2] scheme uses a local scheduler to decide on which process to schedule and when. By using the priority assignment to processes to decide on which process to schedule, a process that is not CPU-intensive will get a better share of the processor as and when it requires.
This would also be very useful also in the situation when both interactive and I/O intensive jobs are mixed with batch jobs. To improve throughput, jobs waiting on I/O relinquish the processor, and are given a higher priority when they have computation. Also, since local scheduling exists on each machine, it requires no additional implementation.
Hence, the basic requirement to get good performance using local scheduling is if the process can decide properly, when to relinquish the processor to another process. If a good estimate of the I/O or message blocking can be estimated, a process can be optimally scheduled so that idle time is minimized thus improving the utilization of the processor.
The implicit scheduling technique as suggested [2], uses a two-phase adaptive blocking mechanism to decide on if and when to de-schedule an idle process. The process is allowed to spin wait for twice its context switch time, and if a message returns within that period of time, it would be more efficient to allow that process to continue than to context switch out. However, if no response is received in that time, a blocked process is scheduled instead of the current one.