登录
首页 >  Golang >  Go问答

这个goroutine的运行机制是什么?

来源:stackoverflow

时间:2024-03-16 10:33:30 179浏览 收藏

goroutine是一种轻量级线程,在Go语言中创建并运行。它通过一个无限循环持续轮询一个通道,等待新事件的到来。当通道关闭时,goroutine才会终止。

问题内容

我对 goroutine 的基本理解是它是创建线程的简化方法。

查看confluence-kafka-go库,给出以下代码作为示例:

go func() {
        for e := range p.Events() {
            switch ev := e.(type) {
            case *kafka.Message:
                if ev.TopicPartition.Error != nil {
                    fmt.Printf("Delivery failed: %v\n", ev.TopicPartition)
                } else {
                    fmt.Printf("Delivered message to %v\n", ev.TopicPartition)
                }
            }
        }
    }()

    // Produce messages to topic (asynchronously)
    topic := "myTopic"
    for _, word := range []string{"Welcome", "to", "the", "Confluent", "Kafka", "Golang", "client"} {
        p.Produce(&kafka.Message{
            TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},
            Value:          []byte(word),
        }, nil)
    }

这是如何工作的?它不会只运行一次并在循环遍历所有 p.events() 后停止工作吗? go 如何知道不中止 goroutine 而是继续轮询 p.events() - 即使它在大多数情况下都是空的?


解决方案


根据documentation for Producer.Events(),返回一个通道。

仅当通道关闭时,通道测距才会终止。更多详情请拨打tour of Go

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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