AMPHP多任务运行机制及HTTP请求阻塞特性技术咨询
关于AMPHP Parallel任务运行行为的解答
用file_get_contents时的运行情况
AMPHP Parallel的Worker池默认会根据CPU核心数设置进程上限——你是8核CPU,所以最多会同时启动8个worker进程,不会一下子开50个。提交的50个任务会先进入队列,由这8个进程逐个认领执行。
但因为file_get_contents是阻塞式IO,每个worker进程在执行任务时,会一直占用一个CPU核心,直到这个请求完全完成(拿到响应或者超时),才会去队列里取下一个任务。整个过程中,只要有任务在执行,对应的核心就会被持续占用,不会主动挂起。
换成AMPHP HTTP Client后的变化
哪怕你不用Promises,只要换成AMPHP的HTTP Client,情况就完全不一样了:它是非阻塞IO实现的。
每个worker进程里,当发起HTTP请求后,不会一直等着服务器响应——这时候进程会被挂起,释放CPU核心去处理其他任务;等服务器返回响应了,进程才会被恢复,继续处理后续逻辑。
这种情况下,8个worker进程就能同时处理远多于8个的HTTP请求,不用每个请求都占着核心等,资源利用率会高很多,50个任务的处理速度也会比用file_get_contents快不少。
内容的提问来源于stack exchange,提问作者Peter Job
相关产品推荐
相关产品推荐

