GO语言学习笔记(十二、并发concurrency)

本文深入解析Go语言中goroutine的工作原理,及其如何通过简单的线程池实现高性能并发。探讨了goroutine与传统线程的区别,以及Go如何利用多核优势。文章还介绍了Channel作为goroutine间通信的桥梁,以及Select机制在并发控制中的应用。

并发concurrency

很多人都冲着Go大肆宣扬的高并发而忍不住跃跃欲试,但其实从源码的解析来看,goroutine只是由官方实现的超级“线程池”而已。

不过话说回来,每个实例4-5KB的栈内存占用和由于实现机制而大幅减少的创建和销毁开销,是制造Go号称的高并发的根本原因。

另外goroutine的简单易用,也在语言层面上给予了开发者巨大的便利。

并发不是并行:Concurrency Is Not Parallelism

并发主要由切换时间片来实现“同时”运行,而并行则是直接利用多核实现多线程的运行,但Go可以设置使用核数,以发挥多核计算机的能力。

Goroutine奉行通过通信来共享内存,而不是共享内存来通信。

Channel

Channel是goroutine沟通的桥梁,大都是阻塞同步的

通过make创建,close关闭

Channel是引用类型

可以使用for range来迭代不断操作channel

可以设置单向或双向通道

可以设置缓存大小,在未被填满前不会发生阻塞

Select

可处理一个或者多个 channel 的发送与接收

同时有多个可用的 channel 时按随机顺序处理

可用空的select来阻塞main函数

可设置超时

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老蒋每日coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值