文档章节

Task Worker进程

M
 MikeMei
发布于 2016/09/07 15:00
字数 439
阅读 12
收藏 0

简介

Task Worker是Swoole中一种特殊的工作进程,该进程的作用是处理一些耗时较长的任务,以达到释放Worker进程的目的。Worker进程可以通过swoole_server对象的task方法投递一个任务到Task Worker进程,其流程如下所示:


Worker->Task Worker: task()
Note right of Task Worker: onTask()
Task Worker-->Worker: finish()
Note left of Worker: onFinish()

'''sequence Title: Here is a title A->B: Normal line B-->C: Dashed line C->>D: Open arrow D-->>A: Dashed open arrow '''

Worker进程通过Unix Sock管道将数据发送给Task Worker,这样Worker进程就可以继续处理新的逻辑,无需等待耗时任务的执行。需要注意的是,由于Task Worker是独立进程,因此无法直接在两个进程之间共享全局变量,需要使用Redis、MySQL或者swoole_table来实现进程间共享数据。

实例

要使用Task Worker,需要进行一些必要的操作。

首先,需要设置swoole_server的配置参数:

$serv->set(array(
    'task_worker_num' => 2, // 设置启动2个task进程
));

接着,绑定必要的回调函数:

$serv->on('Task', 'onTask');
$serv->on('Finish','onFinish');

其中两个回调函数的原型如下所示:

/**
 * @param $serv swoole_server swoole_server对象
 * @param $task_id int 任务id
 * @param $from_id int 投递任务的worker_id
 * @param $data string 投递的数据
 */
function onTask(swoole_server $serv, $task_id, $from_id, $data);

/**
 * @param $serv swoole_server swoole_server对象
 * @param $task_id int 任务id
 * @param $data string 任务返回的数据
 */
function onFinish(swoole_server $serv, $task_id, $data);

在实际逻辑中,当需要发起一个任务请求时,可以使用如下方法调用:

$data = "task data";
$serv->task($data , -1 ); // -1代表不指定task进程

// 在1.8.6+的版本中,可以动态指定onFinish函数
$serv->task($data, -1, function (swoole_server $serv, $task_id, $data) {
    echo "Task Finish Callback\n";
});

© 著作权归作者所有

M
粉丝 0
博文 58
码字总数 16294
作品 0
深圳
高级程序员
私信 提问
Storm 并行度分配原理及优化

当一个topology在storm cluster中运行时,它的并发主要跟3个逻辑对象相关:worker,executor 和task 1. Worker 是运行在工作节点上面,被Supervisor守护进程创建的用来干活的JVM进程。每个W...

飓风2000
2018/09/26
0
0
storm源码之理解Storm中Worker、Executor、Task关系

原文地址:http://www.cnblogs.com/yufengof/p/storm-worker-executor-task.html Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作: 1. Worker(进程) 2. E...

中天剑j
2017/05/08
0
0
Storm nimbus HA

一、storm组件 Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作: 1. Worker(进程) 2. Executor(线程) 3. Task 下图简要描述了这3者之间的关系: 1个wor...

Adel
2016/04/11
344
0
storm拓扑的并行度(parallelism)概念

1 storm并行的基本概念 一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks) 在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑:...

泡海椒
2016/04/03
52
0
storm拓扑的并行度(parallelism)概念

1 storm并行的基本概念 一个运行中的拓扑是由什么构成的:工作进程(worker processes),执行器(executors)和任务(tasks) 在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑:...

张欢19933
2016/02/02
466
0

没有更多内容

加载失败,请刷新页面

加载更多

我最喜欢的Mybatis 3.5新特性——Optional支持

Mybatis 3.5 发布有段时间了,终于支持了 Optional ,这么实用的特性,竟然还没人安利……于是本文出现了。 文章比较简单,但非常实用,因为能大量简化恶心的判空代码。 WARNING 由于本文非常...

周立_ITMuch
13分钟前
4
0
Android 开发工具推荐

简评: 自己过去在 Android 开发中发现的好工具,在这里分享给大家。: ) Library methods count 每一个 Android App 的开发中都会用到很多的库,这个工具能够让你看到不同库的大小和,帮助你...

极光推送
13分钟前
0
0
高并发解决方案

我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100...

孤狼悲月
19分钟前
1
0
Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署

本文首发于:Jenkins 中文社区 渐进式交付是持续交付的下一步, 它将新版本部署到用户的一个子集,并在将其滚动到全部用户之前对其正确性和性能进行评估, 如果不匹配某些关键指标,则进行回...

Jenkins中文社区
24分钟前
3
0
大数据辟谣:布洛芬用药不慎可能致死?如此标题党居心何在

相信很多人看到一则“布洛芬用药不慎可能致死”的消息后,内心开始慌乱了。 (新闻来源:微博热搜排行榜) 毕竟健康是每一个人最关注的话题,而布洛芬也是很多人止痛(发烧头痛、喉咙痛、牙痛...

forespider
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部