reference: https://github.com/chenshuo/muduo almost copied code from muduo delete many,many abstract layer (etc: Channel for different types of events, multi-threads)