goroutine
理论基础 :CSP 模型
Communication Sequential Process
don,t communicate by sharing memory, share memory by communicating
不要通过共享内存来通信,而是通过通信来共享内存
我的理解: 不要先去内存占座, 而是在数据交互的时候去”分坐“
先有数据 再分配资源
协程 coroutine
轻量级"线程"
非抢占式,主动交出控制权
编译器/解释器/虚拟机层面
linux 安装 go
wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz
# 解压文件
tar xfz go1.13.4.linux-amd64.tar.gz -C /usr/local
#修改~/.bashrc
vim ~/.bashrc
#添加Gopath路径
export GOPATH=/usr/local/go
export PATH=$GOPATH/bin:$PATH
# 激活配置
source ~/.bashrc
# 我用的是oh my zsh, 所以改 ~/.zshrc
source ~/.zshrc
vim ~/.zshrc
#变量修改为一下配置
export GOROOT=/usr/local/go
export GOPATH=$PATH:$GOROOT/bin
#check
go version
warning : GOPATH set to GOROOT (/usr/local/go) has no effect
GOPATH set to GOROOT (/usr/local/go) has no effect
协程 Coroutine
python: yield 关键字, 3.5 async def 原生支持
C++ : Boost.Coroutine
Java : 不支持

只要函数前面加上go , 就能送给调度器运行, 非常方便, 不像 Python, 要在定义时声明: async def
调度器在合适的点进行切换 , 是固定的逻辑
可以使用 -race 来检测数据访问冲突

本文深入探讨了Golang中的goroutines和channels,强调了CSP模型和通过通信共享内存的重要性。goroutines作为轻量级线程,通过简单的go关键字启动,调度器在I/O、select和函数调用等点进行切换。文章还详细介绍了channel的类型、缓冲通道、关闭channel以及死锁的避免,同时提到了WaitGroup在并发任务等待中的应用和select的调度功能。此外,讨论了同步机制,如atomic操作,如何替代传统的共享内存同步方式。
最低0.47元/天 解锁文章
1302

被折叠的 条评论
为什么被折叠?



