猜谜游戏
完成功能点
- 生成随机数
- 读取输入文本
- 删除不必要的换行符
- 转化文本为数字
- 循环判断是否猜数正确
- 正确退出循环
- 不正确则从第二步重新开始
并发编程
前言
本文从并发编程的视角来了解Go高性能的本质、为何Go的运行可以如此之快,主要涉及到知识点:并发、并行、协程、CSP模型、Channel、Mutex、WaitGroup等。
并发VS并行
并发是指多个线程在同一个CPU上运行,主要是通过时间片的切换看起来像多个程序在同时运行,只不过CPU时间片的切换十分迅速,我们感知不到。
并行是指多个线程在多个CPU上运行,多个线程在同一时间同时运行而不是时间片的切换。
Go可以充分发挥多核CPU的优势,高效运行。
协程
在Go实现高并发的机制里,还有一个重要的概念——协程Goroutine,协程也叫做轻量级线程。
线程在创建时需要消耗一定的系统资源,线程属于内核态,线程的创建、切换、停止都属于比较重量级的系统操作,占用系统栈资源属于MB级别。
协程是属于用户态的,属于轻量级线程,协程的创建、切换、销毁都是由Go语言本身完成,比线程消耗的资源少的多,占用系统栈资源属于KB级别。
一个线程里可以同时执行多个协程,Go可以同时创建上万级别的协程,也是Go支持高并发原因之一。