笔记--什么是协程
在了解协程之前,我们先来复习下进程和线程:
1.进程:就是应用程序启动的实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。
进程拥有代码和打开的文件资源、数据资源、独立的内存空间。
2.线程:线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。
线程拥有自己的栈空间。
3.对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。无论是进程还是线程,都是由操作系统进行管理的。
4.线程的五种状态:初始化、可运行、运行中、阻塞、销毁
线程不同状态之间的转化是谁来实现的呢?是JVM吗?并不是。JVM需要通过操作系统内核中的TCB(Thread Control Block)模块来改变线程的状态,这一过程需要耗费一定的CPU资源。
5.进程和线程的痛点:
1)涉及到同步锁。
2)涉及到线程阻塞状态和可运行状态之间的切换
3)实际到线程上下文的切换
以上涉及到的任何一点,都是非常耗费性能的操作,这时候协程就要登场了 。
6.什么是协程?
协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。
但是Java中并没有对协程的原生支持,可以查看开源框架Kilim进行模拟。
引用文章地址:https://mp.weixin.qq.com/s/57IERpGIlvRwYCh6vSbMDA
上一篇: 笔记--强一致性、若一致性、最终一致性
下一篇: 笔记--CAS机制