这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
小白,有什么问题还请大家指出
前言:
前几天学习了go的基础语法,对于一门编程语言而言,仅仅学习其基础语法是不够的。于是就有了go语言工程进阶的学习,在此记录一下go语言工程进阶学习时的体会;
并发编程:
go语言可以充分发挥多核优势,高效运行
1.进程和线程
进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位,进程一般由程序、数据集、进程控制块三部分组成。
线程是进程的一个执行实体,线程也叫轻量级进程,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位
一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行
2.并发和并行
多线程程序在一个核的cpu上运行,就是并发
多线程程序在多个核的cpu上运行,就是并行。
3.go语言的并发编程
Goroutine(协程,也叫轻量级线程)
Goroutine是Go语言特有的名词。区别于进程Process,线程Thread,协程Coroutine,因为Go语言的创造者们觉得和他们是有所区别的,所以专门创造了Goroutine。
线程:用户态,轻量级线程,栈MB级别; 协程:内核态,线程跑多个协程,栈KB级别
教程中的例子:
CSP
CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,是一个很强大的并发数据模型,是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。相对于Actor模型,CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。
Channel(通道)
通道是协程之间用来通信和传输数据的工具
make(chan 元素类型,[缓冲大小])
make(chan int) 无缓冲通道
make(chan int,2) 有缓冲通道