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函数到底需要等待多久。下一节通道可以解决此问题。

相关推荐
Archie_IT2 小时前
「深入浅出」嵌入式八股文—P2 内存篇
c语言·开发语言·数据结构·数据库·c++·算法
飞川撸码2 小时前
读扩散、写扩散(推拉模式)详解 及 混合模式(实际场景分析及相关问题)
分布式·后端·架构
未来之窗软件服务2 小时前
从东方仙盟筑基期看 JavaScript 动态生成图片技术-东方仙盟
开发语言·javascript·仙盟创梦ide·东方仙盟·图片技术
paopaokaka_luck2 小时前
基于SpringBoot+Vue的志行交通法规在线模拟考试(AI问答、WebSocket即时通讯、Echarts图形化分析、随机测评)
vue.js·人工智能·spring boot·后端·websocket·echarts
猫头虎2 小时前
如何解决 pip install -r requirements.txt 本地轮子路径 ‘./packages/xxx.whl’ 不存在 问题
开发语言·网络·python·r语言·pip·gpu算力·国产
程序定小飞2 小时前
基于springboot的蜗牛兼职网的设计与实现
java·数据库·vue.js·spring boot·后端·spring
qq_402605652 小时前
python爬虫(三) ---- 分页抓取数据
开发语言·爬虫·python
唐叔在学习2 小时前
Pywebview:Web技术构建桌面应用的最佳选择
后端·python·webview
Wadli2 小时前
C++面经|小林coding|(1)
开发语言·c++