在php中长时间运行的网络呼叫会占用处理器核心吗?

Pet*_*lsh 5 php redis laravel

所以我有一个应用程序,几乎任何用户操作都需要调用第三方系统.所述第三方系统非常慢(400-500ms网络响应时间).

因此,为了保持用户操作快速而不是立即进行调用,作业在Redis缓存中排队,并且队列工作者群集接收这些作业并实际调用第三方服务.

我注意到的是,在将这些作业推入队列后,队列工作者的CPU利用率急剧下降.我的一位同事认为这不是由于新的工作类型(至少不是我想的那样),因为工作人员的CPU核心将跳转到另一个进程,而给定的进程被长时间运行的网络调用占用.

我的问题是 - 是吗?使用PHP,如果我进行长时间运行的网络呼叫,CPU核心是否等待该呼叫?如何测试是否是这种情况?

Tom*_*Tom 0

设置“慢速服务器” index.php

<?php
sleep(10);
echo 'OK';
Run Code Online (Sandbox Code Playgroud)

和一个客户client.php

<?php
echo "GOT: ".file_get_contents('http://localhost:8081')."\n";
Run Code Online (Sandbox Code Playgroud)

在终端中,在包含以下内容的目录中启动 PHP 内置 Web 服务器index.php

$ php -S localhost:8081 & 
Run Code Online (Sandbox Code Playgroud)

(结尾的&号让它在BG中运行)然后运行客户端并计时:

$ time php -f client.php
Run Code Online (Sandbox Code Playgroud)

这给你留下了

[Wed Apr 18 09:00:00 2018] ::1:12345 [200]: /
GOT: OK
php -f client.php 0.05s user 0.01s system 0% cpu 10.070 total
Run Code Online (Sandbox Code Playgroud)

因此,没有重要的用户或系统时间。仅等待(允许其他进程运行)

将其与实际执行操作的脚本进行比较:

$ time php -f pi.php

9.49s user 0.02s system 99% cpu 9.530 total