所以我有一个应用程序,几乎任何用户操作都需要调用第三方系统.所述第三方系统非常慢(400-500ms网络响应时间).
因此,为了保持用户操作快速而不是立即进行调用,作业在Redis缓存中排队,并且队列工作者群集接收这些作业并实际调用第三方服务.
我注意到的是,在将这些作业推入队列后,队列工作者的CPU利用率急剧下降.我的一位同事认为这不是由于新的工作类型(至少不是我想的那样),因为工作人员的CPU核心将跳转到另一个进程,而给定的进程被长时间运行的网络调用占用.
我的问题是 - 是吗?使用PHP,如果我进行长时间运行的网络呼叫,CPU核心是否等待该呼叫?如何测试是否是这种情况?
设置“慢速服务器” 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
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |