什么是协程?

说到协程,你肯定得知道什么是进程和线程吧

推荐这一篇阅读 进程与线程的一个简单解释

 

简单介绍下

进程是什么呢?

直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。

进程拥有代码和打开的文件资源、数据资源、独立的内存空间。

线程又是什么呢?

线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更大的子线程。

线程拥有自己的栈空间。

有人给出了很好的归纳:

对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。

 

协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程 。

最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是用户执行)。

这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

协程的开销远远小于线程的开销。

虽然协程这个概念很早就被提出,但真正作为原生特效被广泛应用,确是在本世纪。

协程的应用

Lua语言

Lua从5.0版本开始使用协程,通过扩展库coroutine来实现。

Python语言

python可以通过yield/send的方式实现协程。在python3.5以后,async/await成了更好的替代方案。

Go语言

Go语言对协程的实现非常强大而简洁,可以轻松创建成百上千个协程并发执行。

Java语言

Java语言并没有对协程的原生支持,但是某些开源框架模拟出了协程的功能。

posted @ 2019-05-08 21:57  牛奔  阅读(1686)  评论(0编辑  收藏  举报