natsClient.Subscribe("some_subject", some_callback): 'some_callback' 回调 运行 是否在 Golang 自己的子程序中?
natsClient.Subscribe("some_subject", some_callback): Does the 'some_callback' callback run in its own subroutine in Golang?
基本上就是主题所说的内容。我很想知道每次调用回调方法时,golang 的 nats-lib 是否确保回调将 运行 在它自己的 goroutine 上(我 99% 确定它确实如此,但我需要肯定是因为我在 nats 中找不到任何明确的文档来最终说明它 - 如果我错过了什么,请随时复制粘贴任何链接)。
如果回调确实 运行 在它自己的 goroutine 中,我也想知道是否:
一个。每次特定订阅都使用相同的 goroutine
或 b。为回调的每次触发创建一个临时的 goroutine:在这种情况下,goroutine 在回调完成其工作后被处理
当你调用conn.Subscribe("some_subject", someCallback)
时,如果定义了回调,它会执行这段代码:
// If we have an async callback, start up a sub specific
// Go routine to deliver the messages.
if cb != nil {
sub.typ = AsyncSubscription
sub.pCond = sync.NewCond(&sub.mu)
go nc.waitForMsgs(sub)
}
它为创建的订阅启动一个 goroutine。当消息到达时,它会在 waitForMsgs
goroutine 中执行定义的回调。
简而言之,答案是 a.,它每次针对特定订阅使用相同的 goroutine。
基本上就是主题所说的内容。我很想知道每次调用回调方法时,golang 的 nats-lib 是否确保回调将 运行 在它自己的 goroutine 上(我 99% 确定它确实如此,但我需要肯定是因为我在 nats 中找不到任何明确的文档来最终说明它 - 如果我错过了什么,请随时复制粘贴任何链接)。
如果回调确实 运行 在它自己的 goroutine 中,我也想知道是否:
一个。每次特定订阅都使用相同的 goroutine
或 b。为回调的每次触发创建一个临时的 goroutine:在这种情况下,goroutine 在回调完成其工作后被处理
当你调用conn.Subscribe("some_subject", someCallback)
时,如果定义了回调,它会执行这段代码:
// If we have an async callback, start up a sub specific
// Go routine to deliver the messages.
if cb != nil {
sub.typ = AsyncSubscription
sub.pCond = sync.NewCond(&sub.mu)
go nc.waitForMsgs(sub)
}
它为创建的订阅启动一个 goroutine。当消息到达时,它会在 waitForMsgs
goroutine 中执行定义的回调。
简而言之,答案是 a.,它每次针对特定订阅使用相同的 goroutine。