通常需要主线程、网络读写线程、业务工作线程(如写文件)
首先主线程负责监听连接,accept后把client fd通过消息或管道发给网络读写线程。
网络读写线程收到client fd后将其加入epoll,有读写事件后触发读写逻辑。
可设计两个chunk queue list,一个正常的List,一个recycle list。比如每个chunk 8K大小,读到数据后写入chunk尾部。
如果该chunk满了,去recycle list里找,找不到就申请一个新的chunk。
写文件线程从chunk queue头部取数据。取完一个chunk后,将其移入recycle list。
可参考lighttpd和protobuf的chunk queue管理方式。