golang笔记—— 进程\线程\协程\Goroutine

2022-02-07  本文已影响0人  无昵称啊

一、并发与并行

1. 并发

并发(Concurrent):1个CPU交错执行2个任务。单核系统中,进程(或线程)通过时间片或出让控制权来实现任务切换,以达到“同时”运行多个程序的目的,实际上任何时刻都只有1个任务被执行。宏观上是“同时”执行,微观上是交错地顺序执行。

并发的特性

能否很好地解决多个进程(或线程)间的同步及互斥关系,将决定程序能否正常运行。

2. 并行

并行(Parallel):2个CPU分别同时各执行了1个任务。多核系统中,理想情况下,可以让多个进程(或线程)做到真正意义上的同时执行,它们之间不需要排队

通过下图中Erlang 之父 Joe Armstrong对并发与并行的说明,我们能清晰的区分并发与并行


二、进程、线程、协程

1. 进程

进程(Process):是操作系统进行资源分配和调度的一个独立单位。是一个具有特定功能的程序运行在一个数据集上的一次动态过程。是应用程序运行的载体。操作系统内核通过进程控制块(PCB,process control block)来感知进程。

进程的组成

进程的切换


进程切换,就是把进程存放在处理器的寄存器中的中间数据存放到进程的私有堆栈中,从而把处理器的寄存器腾出来让其他进程使用。这个中间数据,就被称作该进程的上下文。进程的切换实质上就是被中止运行进程与待运行进程上下文的切换

进程的状态


就绪状态:进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。
运行状态:占有CPU,在CPU上执行。
阻塞状态:由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。
创建状态:进程正在被创建,系统为其初始化PCB,分配资源。
终止状态:进程正在从系统中撤销,回收进程的资源,撤销其PCB。

进程的通信方式

2. 线程

线程(thread):是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

线程的分类

线程的实现可以分为两类:

1)用户级线程(User-Level Thread)

由进程负责调度管理,不依赖于操作系统内核
优点:

缺点:

2)内核级线程(Kernel-Level Thread)

由操作系统支持和管理
优点:

缺点:
频繁的模式切换导致内核开支。

线程的同步

当多个线程同时读写同一份共享资源的时候,可能会引起冲突,这时候,我们需要引入线程“同步”机制。线程同步是为了防止多个线程同时访问同一个数据对象时,对数据造成破坏。线程的同步是保证多线程安全访问资源的一种手段。

主要通过临界区(Critical Section)、互斥对象(Mutex)的机制来实现互斥控制,在Java中分别对应synchornized及对象锁;通过信号量(Semaphore)、事件对象(Event)以通知的方式进行同步控制,在Java中分别对应wait()、notify()等方法。

也可以通过写时复制(Copy On Write)的无锁方式来实现线程的同步,即在每个线程中拷贝一份共享资源的副本。

线程的出现,是为了分离进程的两个功能:资源分配和系统调度。让更细粒度、更轻量的线程来承担调度,减轻调度带来的开销。但线程还是不够轻量,因为调度是在内核空间进行的,每次线程切换都需要陷入内核,这个开销还是不可忽视的。协程则是把调度逻辑在用户空间里实现,通过自己(编译器运行时系统/程序员)模拟控制权的交接,来达到更加细粒度的控制。
在操作系统的OS Thread和编程语言的User Thread之间,实际上存在3种线程对应模型,也就是:1:1,1:N,M:N。

3. 协程

协程(Coroutine):是一种用户级的轻量线程,拥有自己独立的栈和共享的堆,共享堆,不共享栈。协程由程序员在协程的代码里显示调度。进程、线程是操作系统级别的概念,而协程是编译器级别的,协程间切换只需要保存任务的上下文,没有内核的开销。
协程的优势

4. goroutine

Goroutine基本概念

Goroutine特点


参考文档:
https://zhuanlan.zhihu.com/p/137339439
https://zhuanlan.zhihu.com/p/260830550
https://zhuanlan.zhihu.com/p/51194025
https://www.cnblogs.com/LUO77/p/5816326.html
https://blog.csdn.net/cafucwxy/article/details/78453430
https://blog.csdn.net/zhaohong_bo/article/details/89552188
https://www.coder55.com/article/11579
http://www.sizeofvoid.net/goroutine-under-the-hood/
https://zhuanlan.zhihu.com/p/68299348

上一篇 下一篇

猜你喜欢

热点阅读