背景
从进程到线程再到协程,程序设计师们似乎永远在追求着更快的效率和更小的开销。
线程的创建是有开销的,从线程的角度来看,本质上就是处理一个任务,从C++的角度来看,就是std::thread或者pthread_create注册一个函数。与其让线程执行完了就去释放,不如采用池化的思想,通常可能是做成负载均衡的,用一个管理线程去动态检测线程池的负载,来判断是创建还是销毁线程。此外,维护一个任务队列,全局或者采用thread_local结合任务窃取都是可以的,并且再加上事件循环的思想,就可以实现任务分发和执行。
协程作为一种用户态的,更轻量的设计,理应得到更好的运用。一般co_await表示等待IO或者让出。是不是可以有这种一种设计,设计一个协程池,用户向协程池提交任务,由协程池来调度,当有recv或者send的任务时就让出,去执行另一个任务。这样有一个问题,同一个任务可能不会在同一个线程执行,需要考虑thread_local的问题。