I wonder why this class creates two extra threads? I thought such things can/should be implemented using the event loop, which provides non-blocking read/write functionality?