Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 使用map和通道的golang调度员_Design Patterns_Go_Dispatcher_Goroutine - Fatal编程技术网

Design patterns 使用map和通道的golang调度员

Design patterns 使用map和通道的golang调度员,design-patterns,go,dispatcher,goroutine,Design Patterns,Go,Dispatcher,Goroutine,我尝试在并发情况下使用go设计一个调度器,调度器需要将消息分派给其专用工作进程,该进程只处理一种消息(或工作进程),例如: 工作类型A仅处理消息类型A 工作类型B仅处理消息类型B 等等, 因为我可以动态添加/删除处理不同类型消息的专用工作者。现在,我需要一个消息模式,只使用goroutine和channel。我计划有一个通道——一个具有相同类型工作线程的池,并将这些通道放在一个映射中,这样我就可以根据映射中的键按类型分发消息,如果处理消息C的工作线程不存在,它只会将消息分派到垃圾通道进行非处

我尝试在并发情况下使用go设计一个调度器,调度器需要将消息分派给其专用工作进程,该进程只处理一种消息(或工作进程),例如:

  • 工作类型A仅处理消息类型A
  • 工作类型B仅处理消息类型B
  • 等等,
因为我可以动态添加/删除处理不同类型消息的专用工作者。现在,我需要一个消息模式,只使用goroutine和channel。我计划有一个通道——一个具有相同类型工作线程的池,并将这些通道放在一个映射中,这样我就可以根据映射中的键按类型分发消息,如果处理消息C的工作线程不存在,它只会将消息分派到垃圾通道进行非处理,同一类型的工作者可以同时处理同一类型的消息。我不确定这是不是一个更好的设计,有什么建议吗


提前谢谢。

您真的需要像“员工池”一样使用该频道吗?为什么不使用单个通道处理消息,以及接收消息并按提取的消息类型将其发送到相关“处理器功能”的所需工作人员的数量?工作人员池部分可能有点过于工程化:(你为什么不在每次收到他们的信息时,就启动一个新的groutine呢?有一个敬业的员工在旁边等着工作有什么好处?