× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

task_worker_num

配置Task进程的数量,配置此参数后将会启用task功能。所以Server务必要注册onTaskonFinish2个事件回调函数。如果没有注册,服务器程序将无法启动。

  • Task进程是同步阻塞的,配置方式与Worker同步模式一致
  • 最大值不得超过SWOOLE_CPU_NUM * 1000

计算方法

  • 单个task的处理耗时,如100ms,那一个进程1秒就可以处理1/0.1=10个task
  • task投递的速度,如每秒产生2000个task
  • 2000/10=200,需要设置task_worker_num => 200,启用200个task进程

Task进程内不能使用swoole_server->task方法
Task进程内不能使用swoole_mysqlswoole_redisswoole_event等异步IO函数


  • select

    怎么设置同步还是异步模式呢?

  • 老秦

    task进程在一段时间后不断输出 gettimeofday({1468023831, 2293}, NULL) = 0 cpu 100%

  • 老秦

    请关注一下 task进程运行一段时间后死循环的问题

  • Bacysoft

    怎么我发现,开启Task以后,没有任何任务投递,然后 Task 进程不断的被创建然后再销毁,是这样的吗?

  • 包赢不输

    需要一直定时处理的任务适合放在task里面吗?比如检查用户阅读文章的数量,达到一定阅读量,向用户发送信息。如果放在task里面,这个task就永远不会结束了,会一直占用着,是这样吗?

  • 如果TASK进程个数可以像FPM那样弹性伸缩就好了

  • 无枪草民

    task_max_request跟这个有什么关系吗? task每秒10个,处理每个为200秒,task_worker_num设为5,也能正常处理下去。 stats的task_queue_num也很小。才5,6的样子。看不懂了。

  • 翱翔

    'reactor_num' => 1, //reactor thread num 'worker_num'=>4, 'backlog' => 512, //listen backlog 'dispatch_mode' => 3, 'task_worker_num'=>200, 'task_ipc_mode'=>3, 'daemonize'=>true, 'heartbeat_idle_time' => 600, 这个配置,服务端配置是2核4g 三天两头内存爆掉,而且PHP-FPM越开越多导致连接数一直不释放掉

  • 新用户(手机注册)

    我发现一个问题 task_work_num设置的个数为进程数 每次连接一个进程 并且不释放 达到这个数字就不处理新的任务了

  • 15727370906

    task_worker_num 如果是4. 那就是说40秒任务10秒就能完成, 还是说, 取4个任务的最大值呢?

  • 水滴月

    你说的40秒任务是一个任务需要执行40秒呢,还是40个1秒的任务?

  • 15591887133

    @翱翔,相同的问题,目前你的问题解决掉了吗

  • 18513850228

    @寂寞都是基友错 您这问题,找到解决方案没