go笔记08
并行和并发
一、并行
并行的关键是有同时处理多个任务的能力,但只能先做一个,在做另一个并行是加硬件可以解决
同一时间只能做一件事,多件事可以分多个时间去做
指在同一时刻,有多条指令在多个处理器上同时执行
二、并发
并发的关键是有处理多个任务的能力,不一定要同时。
并发时代码性能优化可以解决
同一时间可以快速切换多件事
比如: 吃饭 看电视 玩游戏
指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行
进程 线程 协程
goroutine
一、进程
1.定义
进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。
一个独立的应用,程序运行起来,产生一个进程
进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。
2. 特点:
动态性:进程是程序的一次执行过程,是临时的,有生命周期的,是动态产生的,动态消亡的;
并发性:任何进程都可以同其他进行一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性;进程由程序,数据和进程控制块三部分组成
二、线程
定义及特点
线程是调用CPU运算的最小单元
线程的调度由操作系统进行调度
三、协程
定义及特点
轻量级线程
协程的调度由用户控制
一个进程可以有多个线程,一个线程上可以跑多个协程
四、go中的并发放
使用goroutine 是协程
go 中使用并发
goroutine必定对应一个函数。
多个goroutine可以执行相同的函数
Go程序就会main()函数创建一个默认的goroutine
一、goroutine的使用
先执行主协程,其他的协程创建需要时间,所以会先执行main,在执行Hello
那个空闲执行那个,主携程终止,其他携程也会终止
3. 有缓存和无缓存的区别
无缓存的chan ,chan为空,读取将阻塞,chan不为空,写入将阻塞
有缓存的chan,当缓存满了写入将阻塞,当chan为空读取将阻塞
已关闭的chan中不能写入数据
从关闭的channel读取消息不会产生panic,且只能读取还被读取的消息
关闭channel会产生一个广播机制,所有向channel读取消息的goroutine都会收到消息
四、 Goroutine池
作用
大量的goroutine会占用大量的内存,Goroutine池可以减轻内存负担
性能消耗;重复的创建与销毁goroutine,大量的goroutine调度等会占用资源,goroutine池
可以减轻资源消耗
减少goroutine创建时间,提高效率
管理协程,控制并发量 定期回收等