系列文章目录
文章目录
一、进程、程序、线程、协程、go程
程序:代码编译过后产生的二进制可执行文件,程序是存储于磁盘中,不会变化。
进程:进程占用的是系统资源(内存),活的,最小的分配资源的单位。进程并发:一个程序启动后,有多个进程一起被启动。程序与进程的关系可以是1:1,也可以是1:N(进程并发)。借助MMU虚拟地址映射单元,虚拟出一块内存。
线程:LWP轻量级的进程,最小的执行单位。cpu分配时间片的依据。
协程:轻量级的线程,提高程序执行效率,在线程阻塞的时候,利用cpu去做其他事。
二、进程状态
进程的状态:初始态、就绪态、运行态、挂起(阻塞)态、终止(停止)
三、线程同步
(1)线程同步:为了不让公用的数据产生混乱,解决与时间有关的错误。不管是线程还是进程间都需要有同步机制。
(2)线程同步指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其他线程为保证数据一致性,不能调用该功能。
(3)什么时候需要同步?
多个控制流,共同操作一个共享资源的情况就需要做同步处理。在Go中我们可以借助channel来实现同步。
二、goroutine
1.goroutine特性
(1)goroutine的定义:Go在语言级别中支持协程,叫做goroutine。使用关键字go来使用,放置于函数调用的前面,产生一个go程。Go语言中的并发程序主要使用两种手段来实现:goroutine和channel。
(2)goroutine的特性:主go程结束导致进程退出,进程退出释放函数内存空间,导致子go程随之退出。
2.runtime包
(1)Gosched
出让当前go程所占用的cpu时间片。当再次获得cpu时,从出让位置继续回复执行.——时间片轮转调度算法。
(2)Goexit
return:返回当前函数调用到调用者那里去。return之前的 defer注册生效。
GoexitO:结束调用该函数的当前go程。Goexit(:之前注册的 defer都生效。
(3)GOMAXPROCS
设置当前进程使用的最大cpu核数。返回上一次调用成功的设置值。首次调用返回默认值。