达永编程网

程序员技术分享与交流平台

美团面试:协程是什么?和进程、线程有啥区别?

关注mikechen十余年BAT架构经验倾囊相授!

大家好,我是mikechen。


最近有小伙伴被问到了:协程,协程是什么?进程、线程都经常听说@mikechen

文章来源:mikechen.cc


1.进程(Process)

要理解协程,我们先从进程和线程谈起。

进程操作系统中的一个执行单元,它拥有独立的地址空间、系统资源和调度上下文,可以与其他进程并发执行。

在操作系统中运行的程序就是进程,比如你的QQ、播放器、游戏、IDE等等

进程之间通信需要通过进程间通信(IPC)机制,如管道、信号、消息队列、共享内存等。


2.线程(Thread)

一个进程可以有多个线程,如:QQ,可以同时聊天,看图像等等。

线程之间共享同一进程的上下文和资源,通信方式较为简单,如使用共享变量、锁、条件变量等。


3.协程(Coroutine)

协程(Coroutine)是一种用户态的轻量级线程,不同于操作系统内核态线程的切换方式,协程的切换是由用户自己控制的,可以在代码中任意切换执行流程,避免了线程切换的开销。

一个线程可以包含多个协程,如下图所示:

协程的特点如下:

  1. 协程是由用户自己控制的,不需要操作系统内核态线程的支持,因此创建和销毁的开销非常小。
  2. 协程可以像线程一样并发执行,但是协程之间的切换比线程切换更加轻量级。
  3. 协程可以保留运行时状态,即在协程中的程序可以暂停执行,等待下一次恢复执行,而不会丢失其运行状态。
  4. 协程通常是在单线程内执行,因此避免了多线程并发带来的锁竞争等问题。

协程可以用于高并发的网络编程,I/O密集型操作,以及任务调度等场景。

总体来说,进程是操作系统资源分配的基本单位,线程是进程的执行单元,协程是在应用程序级别实现的轻量级并发单位。

以上

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言