关注△mikechen△,十余年BAT架构经验倾囊相授!
大家好,我是mikechen。
最近有小伙伴被问到了:协程,协程是什么?进程、线程都经常听说@mikechen
文章来源:mikechen.cc
1.进程(Process)
要理解协程,我们先从进程和线程谈起。
进程操作系统中的一个执行单元,它拥有独立的地址空间、系统资源和调度上下文,可以与其他进程并发执行。
在操作系统中运行的程序就是进程,比如你的QQ、播放器、游戏、IDE等等
进程之间通信需要通过进程间通信(IPC)机制,如管道、信号、消息队列、共享内存等。
2.线程(Thread)
一个进程可以有多个线程,如:QQ,可以同时聊天,看图像等等。
线程之间共享同一进程的上下文和资源,通信方式较为简单,如使用共享变量、锁、条件变量等。
3.协程(Coroutine)
协程(Coroutine)是一种用户态的轻量级线程,不同于操作系统内核态线程的切换方式,协程的切换是由用户自己控制的,可以在代码中任意切换执行流程,避免了线程切换的开销。
一个线程可以包含多个协程,如下图所示:
协程的特点如下:
- 协程是由用户自己控制的,不需要操作系统内核态线程的支持,因此创建和销毁的开销非常小。
- 协程可以像线程一样并发执行,但是协程之间的切换比线程切换更加轻量级。
- 协程可以保留运行时状态,即在协程中的程序可以暂停执行,等待下一次恢复执行,而不会丢失其运行状态。
- 协程通常是在单线程内执行,因此避免了多线程并发带来的锁竞争等问题。
协程可以用于高并发的网络编程,I/O密集型操作,以及任务调度等场景。
总体来说,进程是操作系统资源分配的基本单位,线程是进程的执行单元,协程是在应用程序级别实现的轻量级并发单位。
以上
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。