in contrast, most microkernel systems are based on a model of asynchronous communications, as opposed to synchronous procedure calls. the canonical microkernel system, mach, modeled messages as i/o, which has several important side-effects. primary among these is that the normal task schedulers under unix-like systems will normally block a client that is waiting on an i/o request, so in this way the actions of pausing and restarting applications waiting on messages was already built into the underlying system. the downside to this approach is that the scheduler is fairly "heavyweight", and calling it was a serious performance bottleneck and led to extensive development efforts to improve its performance. under the v-system model the message passing overhead is reduced because the process scheduler does not have to be consulted, there is no question as to who should next be run – it's the server being called. the downside to the v approach is that it requires more work on the server side if the response may take some time to process.