登录
首页 >  Golang >  Go问答

Sleep函数会阻塞其他goroutine吗?

来源:stackoverflow

时间:2024-03-11 12:42:26 179浏览 收藏

一分耕耘,一分收获!既然都打开这篇《Sleep函数会阻塞其他goroutine吗?》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

实际上我正在尝试做这样的事情:

我有一个生产者和一个消费者,消费者每隔几分钟检查一次并计算通道中的事件。但当我尝试在 go 演示中测试它时,我发现:

package main

import (
    "fmt"
    "time"
)

func main() {

    c1 := make(chan string, 1)
    quit := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {

            c1 <- "result 1"
        }
        quit <- 1
    }()

    count := 0
    for stop := false; !stop; {
        for bk := false; !bk; {
            select {
            case _, ok := <-c1:
                if ok {
                    count++
                }
            default:
                bk = true
                fmt.println("default")
            }
        }
        select {
        case <-quit:
            fmt.println("stop")
            stop = true
        default:
        }
        fmt.println(count)
        time.sleep(time.second / 10)

    }
    fmt.println("over")

}

无论睡多久,从time.second/10到time.second*10, 输出将是:

default
0
default
2
default
4
default
6
default
8
default
10
default
stop
10
over

为什么 goroutine 只能在通道中放入 2 个事件? 我想要这样的东西:

default
0
default
stop
10
over

问题是通道大小,我只是从其他代码复制并没有检查...


解决方案


没有。

到这里,我们也就讲完了《Sleep函数会阻塞其他goroutine吗?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>