使用通道更快地关闭 goroutine

使用通道更快地关闭 goroutine

问题内容

我是 GO 新手,我有一个关于使用通道信号停止 goroutine 的问题。

我有一个长期运行的 goroutine(超过 1000 个)和管理器来管理它:

func myThreadFunc(stop chan bool) {    for {        select {        case 

在这种情况下,每次我调用 c

我尝试的唯一方法是像这样投射新的 goroutine:

var stopTest = func() {        for _, c := range cancelChannelSlice {            go func(c chan bool) {                c 

我这是正确的方法吗?


正确答案


据我从您的问题中了解到,“您希望所有 goroutine 在 callClientTask() 的 1 次迭代中停止(不超过 30 秒)”并且工作线程同时运行而不会出现同步问题。

我重新组织了与等待组同时运行的代码。

示例代码:

package mainimport (    "log"    "sync"    "time")func worker(stop 

输出:

2023/10/26 10:40:44 Stopping thread2023/10/26 10:40:44 Stopping thread....2023/10/26 10:40:49 Stopping thread2023/10/26 10:40:49 Stopping thread

登录后复制

编辑:

如果您想停止某些工作人员,则必须更新工作人员。以下代码包括具有“停止”和“停止”通道的工作人员以及启动/停止功能。

示例代码:

package mainimport (    "log"    "sync"    "time")type Worker struct {    stop    chan struct{}    stopped chan struct{}}func NewWorker() *Worker {    return &Worker{        stop:    make(chan struct{}),        stopped: make(chan struct{}),    }}func (w *Worker) Start(wg *sync.WaitGroup) {    wg.Add(1)    go func() {        defer wg.Done()        for {            select {            case 

输出:

2023/10/26 12:51:26 Stopping thread2023/10/26 12:51:28 Stopping thread2023/10/26 12:51:30 Stopping thread....

登录后复制

以上就是使用通道更快地关闭 goroutine的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2359873.html

(0)
上一篇 2025年3月1日 17:55:03
下一篇 2025年3月1日 17:55:20

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论