1. A process comprising the following steps: a user-mode thread X of an application which has multiple threads in a multithreaded computer system making a non-blocking request to a message passing interface library which is limited in at least one of the following ways: (a) all calls to the message passing interface library from the application must come from thread X, (b) all application calls to the message passing interface library are serialized and therefore no other thread of the application may call the message passing library while thread X is calling the message passing library; deterministically associating in a memory of the multithreaded computer system a callback routine with the non-blocking request as an asynchronous callback to the thread X, the associating step being deterministic in that the callback will be executed by the thread X that made the non-blocking request rather than being executed by some other thread of the application; the thread X transitioning from a closed state in which the thread X will not process an asynchronous callback to an open state in which the thread X will process an asynchronous callback; and a thread other than thread X detecting that the request is complete, and then queueing the callback routine for execution by thread X.