Closed matyhtf closed 5 years ago
我觉得只允许在User Process
中使用Server->task
投递任务即可。
Master
、Manager
非工作进程,不该处理任务
Task Worker
已经是被投递任务的执行体,再投递单向的task任务容易导致task滥用,task严重阻塞。这个功能可以用Task Woker
中开启协程来代替。
现在 master manager 进程已经移除了各种限制。过去我们底层设置的约束条件太多了,我们逐渐去掉这个限制,由开发者自己去选择。
UserWorker投递任务,是不是可以设置在worker进程中onFinish?
UserWorker投递 -> Task 执行 -> Worker onFinish
@mineyang 这个逻辑是有问题的。finish 的意思是结果原路返回。
我现在是做了一个代理,从UserWorker进程里使用sendMessage方法发送worker进程(随机指定),再从worker进程里转发任务,任务完成后返回给worker进程处理
你这里直接用 sendMessage 就可以实现,不需要中转。
现状
目前在
Master
、Manager
、User Process
中无法调用Server->task
投递任务。 主要原因是非Worker
进程不方便实现Server->finish
和onFinish
回调。改进
增加单向
task
支持,类型为SW_TASK_NOREPLY
,使Master
、Manager
、User Process
中均可使用Server->task
投递任务。但这个过程只能是单向的,
onTask
回调中不得使用Server->finish
或return
数值,回复任务结果。否则底层会抛出错误信息。TaskWorker
在
Task Worker
进程中仍然禁止使用Server->task
,主要原因是,避免出现永动机,无限递归产生新的任务,导致死锁。Task Worker
进程本身定位是消费者进程,其他是生产者,在Task Worker
中允许投递任务,完全破坏了生产者消费者模型,消费者又是生产者,这产生了混乱。版本
4.2.13
和4.3.0
版本中添加