高并发下,异步任务的数据接收延迟问题

idiotbaka

使用方法引用的是:http://doc.workerman.net/faq/async-task.html
 高并发下,workerman把繁重的任务交给本机另一个任务进程异步处理。
workerman发送数据,发送的$task_data里带有发送时间的时间戳:

$task_data = time();
$task_connection->send(json_encode($task_data));

任务进程接受数据:
$task_worker->onMessage = function($connection, $task_data)
{
    $task_data = json_decode($task_data, true);
    // receive_time 在高并发下有时候会有十几秒
    $receive_time = time() - $task_data;
}

任务进程接到任务的时候,当前时间和发送时间相减,发现高并发情况下,有时候会出现一连串十几条的任务,接受数据延迟达到7、8秒,甚至十几秒,可能会是什么原因呢。

2999 3 0
3个回答

xiuwang

系统到达极限慢是正常的,cpu忙不过来了。加硬件或者服务器

  • idiotbaka 2019-08-08

    感谢回答。应该不是CPU的问题,CPU的占用率在并发高的时候没跑满,一次发送到任务进程几百条数据的时候,有时候会出现有一连串的几条数据接收延迟达到十几秒,其余数据都是秒接,也不平滑

  • xiuwang 2019-08-08

    任务进程处理任务也要时间的,处理不过来就排队了,延迟也就是正常的事情。
    多开进程试下没准会好一些

  • idiotbaka 2019-08-09

    @1459:考虑到这一点了,测试时进程从16个加到了上百个还是会有延迟出现,系统优化也做了,感觉也有可能是阿里云的linux系统的问题

zhouaini528

解决了吗?我也是同样的问题

  • 暂无评论
cqqjj1029

你用的是redis-queue吗,考虑下redis内存优化试试呢

  • 暂无评论
年代过于久远,无法发表回答
🔝