fasthttp中的workerPool

感觉最近跟workerPool干上了,只要涉及到维护一个pool并发处理事情的地方都是workerPool,这次是利用pool管理net.Conn

workerPool主要支持下述功能:

  • 管理一个worker的列表,定时删除空闲时间过长的worker;每次取最近使用过的空闲worker,作者的理由是,cpu有可能会cache最近使用过的资源,那么我们不要浪费直接用它,连内存都不访问了(理论上)。
  • 需要有停止功能,停止会影响到正在处理工作的worker,但是会标记worker为mustStop=true,这个worker稍后会看到并释放资源。
  • 上层net.Listener接收到请求,交给workerPool处理时,workerPool先看是否有活动的中的worker,如果有直接交给它处理,如果没有且worker的数量还没有到达上限,则新建worker并存入sync.Pool(注意这里也是一个小优化,可以使workerChanPool给gc减压)

这段时间调研了raven-go,查看一些关于pool的blog,也在生产中应用了workerPool类似的概念。现在感觉请求的分发与处理,性能的核心点在于对http长连接的管理,尽量重用,让cpu专注于处理更重要的事情上。

fasthttp中的workerPool
Share this