There are a variety of asynchronous services that a client program can utilise. The main types are:
service provided by the kernel
service provided by a server thread, running in user mode
service provided by a device driver
service provided in the same thread