worker_pool 由一个worker_pool 和N个worker_pool_worker组成, N = number of scheduler threads
外部程序有两种方式来call worker_pool , submit(func) and submit_async(func)
submit(func) 是同步的提交Task,worker_pool 用worker_pool_worker做完返回
submit_async(func)是异步的提交Task,worker_pool 找个worker_pool_worker异步去做,如果没有worker_pool_worker就把Task加到Queue里
worker_pool是一个gen_server2的behavior,而且使用了hibernate和backoff,保证在没有Task request时候进入hibernate状态。
submit
submit是同步提交Task的方法,
1. 如果State里有available的worker_pool_worker,
1.1 monitor call submit的pid, 如果这个pid 意外退出,worker_pool_worker会收到request,在worker_pool_worker的handle_info里处理,避免有pid 意外退出,却没有释放worker_pool_worker
1.2 就把call submit的pid 放到worker_pool_worker的State里
1.3 停止monito