sogou / workflow

C++ Parallel Computing and Asynchronous Networking Framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

如何使用wf实现多个任务队列的调度

huangsefenggmail opened this issue · comments

场景:

udp server收到数据之后需要转发给多个终端,但是在转发前需要针对终端进行不同的计算,并且转发顺序和接收顺序尽可能一致(乱序带来影响较大)。

我的想法:

1.udp server收到数据之后创建多个任务,扔给不同名字的任务队列。
2.每个任务队列能够按照FIFO方式处理任务。

拜读了相关文章发现,wf的Executor处理同名任务队列时,可能会出现同时处理多个同名队列任务的情况,但是由于每个任务计算难度不同,可能导致较大的发送时间差异,请问wf是否能够处理这种场景,如果可以的话,如何处理呢?

没想到UDP server已经有用户了,使用过程中有遇到什么问题吗?

同一个队列名是顺序调度的,但只要有线程也是并行处理的,后面的任务先执行完是正常现象。你希望是什么效果呢?让前面的任务先发送吗?如果要这么做,你考虑一下吧任务放到一个series里吧,这样就都串行了。

如果希望并行计算,顺序发送,可以考虑把发送任务放的一个series,每个任务套一个WFConditional,计算任务结束signal对应的conditional。这样发送任务全部串行。

没想到UDP server已经有用户了,使用过程中有遇到什么问题吗?

同一个队列名是顺序调度的,但只要有线程也是并行处理的,后面的任务先执行完是正常现象。你希望是什么效果呢?让前面的任务先发送吗?如果要这么做,你考虑一下吧任务放到一个series里吧,这样就都串行了。

没想到UDP server已经有用户了,使用过程中有遇到什么问题吗?-----还在摸索中hh

我希望的效果是server收到数据后,计算过后转发给A,B,C等多个对端。然后每个接收方自己接收的数据都是顺序的(虽然udp不保证有序,但是还是希望尽量有序,对性能有影响)。如果用series的话,支持start之后继续push_back吗?因为udp server会不断收到数据,需要不断计算并转发给各端(但是各端自身收到的数据尽量保持原序)。

你这个“尽量保持”让我很难办啊,不知道你的标准是什么。要么就完全保序,要么乱序,都好做一点。

series启动之后可以push back,但你需要确保series还在。如果来自不同的网络请求,没有必要用series来保序,应该用WFResourcePool,我们文档里有,资源池部分。

你这个“尽量保持”让我很难办啊,不知道你的标准是什么。要么就完全保序,要么乱序,都好做一点。

series启动之后可以push back,但你需要确保series还在。如果来自不同的网络请求,没有必要用series来保序,应该用WFResourcePool,我们文档里有,资源池部分。

之前我的表达有些问题,尽量有序,是指我希望通过wf框架发送数据的行为完全有序,udp本身因素无序先不管。
我的需求看起来可以用series来实现,我去尝试一下。

感谢解答