1.0 从并发编程本质了解Go高性能的本质
1.1 Goroutine
协程可以理解为轻量级线程;
Go更适合高并发场景原因之一:Go语言一次可以创建上万协成;
“快速”:开多个协成 打印。
go func(): 在函数前加 go 代表 创建协程;
time.Sleep(): 协程阻塞,使主协程 在子协程结束前阻塞不退出;
乱序输出 说明并行;
1.2 协程通信 CSP (Communicating Sequential Processes)
通过通信共享内存:Channel通道遵循 先入先出 保证顺序
1.3Channel
Channel创建需要通过make()函数;
无缓冲通道也称 同步通道;有缓冲:缓冲满了之后要拿走才能存。
通过通信共享内存 服务器托管网例子:
M主函数作为消费者 实际中业务比较复杂,所以会 比 生产者AB慢;我们用 带缓冲的通道 就不会因消费者M的消费速度 影响 生产者的执行效率;
1.4 并发安全Lock
addWithLock() 通过临界区控制实现;在 每次 x+=1前后加解锁;
addWithOutLock() 没加锁; Add 测试函数;对两种实现做5个协程并发执行;
结果为:加锁时输出预期结果10000;体现不加锁的并发安全问题
1.5 WaitGroup实现并发任务的同步
计算器=0表示所有并发任务结束;
1.5.1阻塞的优化
好的,以上就是对go并发编程相关概念的介绍,这里简单做个小结
整个章节主要涉及3个方面,一个是协程,通过高效的调度模型实现高并发操作,一个是通道channel.通过通信实现共享内存;最后svnc相关关键字,实现并发安全操作和协程间的同步
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
环境:UE4.27、vs2019 如服务器托管网何解决 问题原因,UE的编码默认是UTF-8,VS的默认编码是GBK 通过”高级保存选项” 直接修改VS的 .h头文件 的 编码 为 UTF-8 步骤1. 步骤2. 修改编码后,从新编译,然后就可以解决编辑器乱码…