gpt4 book ai didi

multithreading - 可能/推荐在 Go 中编写事件驱动的应用程序?

转载 作者:IT王子 更新时间:2023-10-29 01:45:43 26 4
gpt4 key购买 nike

我正在设计一个应用程序来管理给定特定规则的 RabbitMQ worker。例如:

  • 维持最低数量的 worker
  • 如果队列增长超过 M 个任务,则产生最多 N 个 worker
  • 杀死超过 X 分钟的 worker

我最初想用 Go 编写它,因为它是经过编译的,我可以简单地将应用程序编译到目标操作系统并将其守护进程。但是,我的概念设计涉及一个循环,该循环每 Y 秒收集一次数据并将其传递给决策引擎。然后引擎会引发事件,其他 goroutine 会监听这些事件以产生或杀死 worker。

我找到了 Emission库可以解决这个问题,但我在某处读到一条评论说它可能不是线程安全的。老实说,我对 Go 和线程编程的了解不足以正确评估这个库是否能完成我需要的,或者这在 Go 中是否可行。

我可以在 NodeJS 中非常快速地编写它,甚至可以使用 nexe 编译它.然而,我想学习一门新语言,我喜欢 Go 中的目标编译,并且它可以超越 goroutines 本身的多线程。

这有可能吗,或者我是否在尝试将 Go 本来不应该做的事情硬塞进 Go 中?以不同的方式实现相同的目标还是一起使用不同的语言会更好?

最佳答案

我以前从未见过 Emission 库,它可以非常巧妙地向您的工作人员发送不同的消息。这也可以通过使用 channel 来实现,这将是一种更灵活的实现方式,但如果您不懂该语言,也会更加麻烦。

我当然会在 channel 上阅读,但要非常小心,因为通过 channel 广播并不简单。看看这个例子 ( https://rogpeppe.wordpress.com/2009/12/01/concurrent-idioms-1-broadcasting-values-in-go-with-linked-channels/ )

总的来说,我会看一下 Tunny ( https://github.com/Jeffail/tunny) 来管理工作人员,它已经为您完成了大部分实现工作。

关于multithreading - 可能/推荐在 Go 中编写事件驱动的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com