1) I would like to have a couple 'server' threads dealing with different types of requests, e.g. 1 thread for http+websockets, one for raw sockets, ++. How would I do that? Is it enough to call the individual setup-functions in each thread and then call 'start()'?

2) For a server thread waiting for incoming connections or data on existing threads, e.g. thread A. How would I asynchronously send data to thread A based on a request from another thread?

3) For threads where the main focus is not listening for requests, but e.g. sending some data to a mongodb server. Is it possible to just call the related DB functions and continue executing code, checking back on the request at a later time if it was fulfilled? Note that I don't want this thread to be running an event-loop.