New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC-1015 : Server->task 允许使用在非 Worker 进程中使用 #38

Open
matyhtf opened this Issue Jan 22, 2019 · 6 comments

Comments

Projects
None yet
3 participants
@matyhtf
Copy link
Member

matyhtf commented Jan 22, 2019

现状

目前在MasterManagerUser Process中无法调用Server->task投递任务。
主要原因是非Worker进程不方便实现Server->finishonFinish回调。

改进

增加单向task支持,类型为SW_TASK_NOREPLY,使MasterManagerUser Process中均可使用Server->task投递任务。

但这个过程只能是单向的onTask回调中不得使用Server->finishreturn数值,回复任务结果。否则底层会抛出错误信息。

taskwaittaskCotaskWaitMulti 依然只允许在Worker进程中使用

TaskWorker

Task Worker进程中仍然禁止使用Server->task,主要原因是,避免出现永动机,无限递归产生新的任务,导致死锁。

Task Worker进程本身定位是消费者进程,其他是生产者,在Task Worker中允许投递任务,完全破坏了生产者消费者模型,消费者又是生产者,这产生了混乱。

版本

  • 预计在4.2.134.3.0版本中添加
@shiguangqi

This comment has been minimized.

Copy link
Member

shiguangqi commented Jan 22, 2019

我觉得只允许在User Process中使用Server->task投递任务即可。

  1. MasterManager非工作进程,不该处理任务

  2. Task Worker 已经是被投递任务的执行体,再投递单向的task任务容易导致task滥用,task严重阻塞。这个功能可以用Task Woker中开启协程来代替。

@matyhtf

This comment has been minimized.

Copy link
Member Author

matyhtf commented Jan 22, 2019

现在 master manager 进程已经移除了各种限制。过去我们底层设置的约束条件太多了,我们逐渐去掉这个限制,由开发者自己去选择。

@mineyang

This comment has been minimized.

Copy link

mineyang commented Jan 22, 2019

UserWorker投递任务,是不是可以设置在worker进程中onFinish?

UserWorker投递 -> Task 执行 -> Worker onFinish

@matyhtf

This comment has been minimized.

Copy link
Member Author

matyhtf commented Jan 22, 2019

@mineyang 这个逻辑是有问题的。finish 的意思是结果原路返回。

@matyhtf matyhtf changed the title Server->task 允许使用在非 Worker 进程中使用 RFC-1015 : Server->task 允许使用在非 Worker 进程中使用 Jan 22, 2019

@mineyang

This comment has been minimized.

Copy link

mineyang commented Jan 22, 2019

我现在是做了一个代理,从UserWorker进程里使用sendMessage方法发送worker进程(随机指定),再从worker进程里转发任务,任务完成后返回给worker进程处理

@matyhtf

This comment has been minimized.

Copy link
Member Author

matyhtf commented Jan 22, 2019

你这里直接用 sendMessage 就可以实现,不需要中转。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment