Go语言入门(22)-goroutine

在Go中,独立的任务叫做goroutine。虽然goroutine与其他语言中的协程、进程、线程都有相似之处,但goroutine和它们并不完全相同。goroutine创建效率非常高,并且Go能直截了当地协同多个并发(concurrent)操作

在某些语言中,将顺序式代码转化为并发式代码需要做大量修改。在Go里,无需修改现有顺序式地代码,就可以通过goroutine一并发地方式运行任意数量的任务。

启动goroutine的方法:只需在调用前面加一个go关键字。

Go 复制代码
package main

import (
    "fmt"
    "time"
)

func main() {
    go sleepyGopher()//分支路线
    //time.Sleep(4 * time.Second)//主路线
}

func go sleepyGopher(){
    time.Sleep(3 * time.Second)
    fmt.Println("...snore...")
}

将主路线注释掉编译运行,再解除注释编译运行,即可看到对比效果。

每次使用go关键字都会产生一个新的goroutine。表面上看,goroutine似乎在同时运行,但由于计算机处理单元有限,其实技术上来说,这些goroutine不是真的在同时运行(计算机处理器会使用"分时"技术,在多个goroutine上轮流花费一些时间;在使用goroutine时,各个goroutine的执行顺序无法确定)。

向goroutine传递参数就跟向函数传递参数一样,参数都是按值传递的

代码的问题:无法知道Goroutine要执行多长时间,也就不知道main函数到底需要等待多久。下一节通道可以解决此问题。

相关推荐
微学AI5 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
豆瓣鸡6 小时前
算法日记 - Day3
java·开发语言·算法
mldong6 小时前
从 mldong 到 jeeflow:一个工作流引擎的独立进化
后端
Achou.Wang6 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
韭菜炒鸡肝天6 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
陈随易6 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
Aaron - Wistron7 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
卷无止境7 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境7 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
Dxy12393102168 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python