首页 > 其他分享 >Goroutine

Goroutine

时间:2024-10-31 14:33:37浏览次数:1  
标签:fmt Goroutine sayHello time Go 执行

在 Go 语言中,Goroutine 是一种轻量级的并发执行单元,可以理解为 Go 的“协程”。
它由 Go 运行时管理,用于执行函数或任务。Goroutine 的轻量级和高效并发特性使 Go 能够轻松处理数千甚至数百万个并发任务,适合构建高并发的服务器和网络应用。

Goroutine 的启动

Goroutine 通过 go 关键字启动

package main

import (
    "fmt"
    "time"
)

func sayHello() {
    fmt.Println("Hello, World!")
}

func main() {
    go sayHello()  // 启动一个新的 Goroutine 来执行 sayHello 函数
    time.Sleep(time.Second)  // 给 Goroutine 足够的时间执行
}

在上面的代码中,sayHello 函数在一个新的 Goroutine 中执行,而主函数继续执行下去。
time.Sleep(time.Second) 是为了确保 sayHello 有时间输出,因为主函数在没有同步机制的情况下会立即结束。

Goroutine 与主 Goroutine

每个 Go 程序都会从一个默认的 Goroutine(即主 Goroutine)开始执行。在主 Goroutine 中,可以启动其他 Goroutine。当主 Goroutine 结束时,程序会立即退出,不论其他 Goroutine 是否完成。因此,在实际使用中,通常需要同步 Goroutine 的执行。

4. Goroutine 的同步和通信

由于 Goroutine 是并发执行的,往往需要同步和通信。Go 提供了 通道(Channel) 来实现 Goroutine 之间的数据传递和同步。通道是 Go 原生的同步机制,用于在 Goroutine 之间安全地传递数据。

示例:Goroutine 和通道

package main

import (
    "fmt"
)

func greet(done chan bool) {
    fmt.Println("Hello from Goroutine")
    done <- true // 向通道发送信号
}

func main() {
    done := make(chan bool)
    go greet(done)  // 启动 Goroutine

    <-done          // 等待 Goroutine 完成
    fmt.Println("Main Goroutine Finished")
}

在此代码中,主 Goroutine 启动了 greet Goroutine,并通过 done 通道等待 greet 执行完成后再继续。

标签:fmt,Goroutine,sayHello,time,Go,执行
From: https://www.cnblogs.com/niumachen/p/18517705

相关文章

  • 探索Go语言中的Goroutine并发机制
    什么是Goroutine在Go语言中,Goroutine是程序中最基本的并发单位。事实上,每个Go程序都会自动创建一个goroutine,那就是主goroutine,程序启动时会立即执行。Goroutine是Go语言中处理并发问题的核心工具,因此理解它的工作原理至关重要。简而言之,Goroutine是并发执行的函数,这些函......
  • 深入理解Go并发编程:避免Goroutine泄漏与错误处理
    Go语言以其强大的并发模型和高效的协程(goroutine)而闻名。协程的轻量级和易用性使得并发编程变得更加简单。然而,如果不正确管理协程,可能会导致Goroutine泄漏,从而消耗系统资源,影响程序性能。本文将深入探讨如何避免Goroutine泄漏,并提供实用的代码示例和技巧,帮助您编写更加健壮......
  • Go runtime 调度器精讲(六):非 main goroutine 运行
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言在Goruntime调度器精讲(三):maingoroutine创建介绍了maingoroutine的创建,文中我们说maingoroutine和非maingoroutine有区别。当时卖了个关子并未往下讲,这一讲我们会继续介绍非maingoroutine(也就是go关键字创建的......
  • Go runtime 调度器精讲(四):运行 main goroutine
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言皇天不负有心人,终于我们到了运行maingoroutine环节了。让我们走起来,看看一个goroutine到底是怎么运行的。1.运行goroutine稍微回顾下前面的内容,第一讲Go程序初始化,介绍了Go程序是怎么进入到runtime的,随之揭开runti......
  • Go runtime 调度器精讲(三):main goroutine 创建
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言回顾下上一讲的内容。主线程m0蓄势待发,准备干活。g0为m0提供了执行环境,P和m0绑定,为m0提供活,也就是goroutine。那么问题来了,活呢?哪里有活给m0干?这一讲我们将介绍m0执行的第一个活,也就是maingoroutine。maingou......
  • Goroutines
    Goroutines是Go语言中的核心并发原语。它们是由Go运行时管理的轻量级线程,能够以更高效的方式进行并发操作。基本概念轻量级线程:Goroutines是比操作系统线程更轻量的执行单元。它们的启动和管理开销很小,可以同时运行成千上万的Goroutines。调度:Go运行时会自动......
  • Go如何获取goroutineId
    runtime包packagemainimport("bytes""log""os""runtime""strconv""time")funcgetGoroutineID()uint64{b:=make([]byte,64)b=b[:runtime.Stack(b,false......
  • day13 Goroutine 协程
    了解计算机原理进程:计算机资源分配单位线程:cpu处理单位协程:以特殊机制或者函数实现高并发,又称轻量级线程了解GoroutineGoGoroutine,go语言中的协程,实现并发。关键字go初始大小4k,随着程序执行自动增长和删除实现多线程并发执行packagemainimport"fmt"fu......
  • [Golang基础]Goroutine
    协程(CoRoutine)是一种轻量级的用户态线程。简单来说,线程(thread)的调度是由操作系统负责,线程的睡眠、等待、唤醒的时机是由操作系统控制,开发者无法决定。使用协程,开发者可以自行控制程序切换的时机,可以在一个函数执行到一半的时候中断执行,让出CPU,在需要的时候再回到中断点继续执行。......
  • Go Goroutine 究竟可以开多少?(详细介绍)
    GoGoroutine究竟可以开多少?Go语言因其高效的并发处理能力而备受欢迎,而Goroutine则是Go语言实现并发编程的核心。Goroutine比传统的线程更加轻量,允许开发者轻松地处理大量并发任务。那么,Go语言中的Goroutine究竟可以开多少呢?在回答这个问题之前,我们需要先了解两个关键问题......