`

协程与线程

 
阅读更多

Reference:https://time.geekbang.org/column/article/104521

 

协程的实现原理

协程不只在Go语言中实现了,其实目前大部分语言都实现了自己的一套协程,包括C#、erlang、python、lua、javascript、ruby等。

 

相对于协程,你可能对进程和线程更为熟悉。

进程一般代表一个应用服务,在一个应用服务中可以创建多个线程,

而协程与进程、线程的概念不一样,可以将协程看作是一个类函数或者一块函数中的代码,可以在一个主线程里面轻松创建多个协程。

 

程序调用协程与调用函数不一样的是,协程可以通过暂停或者阻塞的方式将协程的执行挂起,而其它协程可以继续执行。这里的挂起只是在程序中(用户态)的挂起,同时将代码执行权转让给其它协程使用,待获取执行权的协程执行完成之后,将从挂起点唤醒挂起的协程。 协程的挂起和唤醒是通过一个调度器来完成的。

 

相比线程,协程少了由于同步资源竞争带来的CPU上下文切换,I/O密集型的应用比较适合使用,特别是在网络请求中,有较多的时间在等待后端响应,协程可以保证线程不会阻塞在等待网络响应中,充分利用了多核多线程的能力。而对于CPU密集型的应用,由于在多数情况下CPU都比较繁忙,协程的优势就不是特别明显了。

 

总结

协程和线程密切相关,协程可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。

 

协程又是一种轻量级资源,即使创建了上千个协程,对于系统来说也不是很大的负担,但如果在程序中创建上千个线程,那系统可真就压力山大了。可以说,协程的设计方式极大地提高了线程的使用率。

分享到:
评论

相关推荐

    简述Python中的进程、线程、协程

    进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程...

    协程与微线程demo

    协程与微线程demo,详情见blog.csdn.net/fuadam

    C 协程库orchid.zip

    某种意义上,协程与线程的关系类似与线程与进程的关系,多个协程会在同一个线程的上下文之中运行。因此,当出现IO操作的时候,为了能够与协程相互配合,只阻塞当前协程而非整个线程,需要将io对象“green化”。目前...

    多协程、多线程、多进程代码

    python中有关多协程、多线程、多进程等的代码示例文件。 python中有关多协程、多线程、多进程等的代码示例文件。 python中有关多协程、多线程、多进程等的代码示例文件。

    操作系统相关的部分面试题

    协程与线程的区别? * 线程和进程都是同步机制,而协程是异步机制。 * 线程是抢占式,而协程是非抢占式的。需要用户释放使用权切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 * ...

    深入浅析python 协程与go协程的区别

    进程、线程和协程 进程的定义: 进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。 线程的定义: 操作系统能够进行运算调度的最小单位。它被包含在进程之...

    coroutine_event.zip

    在某种意义上,协程与线程的关系类似于线程与进程的关系,你可以将协程理解成用户态线程。目前的IO操作都可能会导致整个线程的挂起,但是我们只希望挂起当前执行的协程,因此需要将IO对象进行改造,让其只会导致挂起...

    操作系统核心知识点总结

    内容概要:内容包括进程与线程的关系与对比、进程间的通信方式、进程的调度策略、进程的状态、进程与线程间的同步方式、死锁及解决方法、协程与线程、虚拟内存、用户态与内核态、并发与并行等面试中最常见的八股文...

    java线程与协程效果对比

    NULL 博文链接:https://guoba6688-sina-com.iteye.com/blog/733778

    02进程、线程与协程.zip

    02进程、线程与协程

    c++ libgo 多协程ppt

    c++ 下多协程,以及使用libgo,多协程的优势,作用,与多线程对比

    关于PHP中协程和阻塞的一些理解与思考

    本文主要给大家介绍了关于PHP中协程和阻塞的理解与思考,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 进程、线程、协程 关于进程、线程、协程,有非常详细和丰富的博客或者学习资源,我不在此...

    并行计算 多线程 actor 协程 process

    并行计算 多线程 actor 协程 process

    快速上手,协程剖析

    协程也叫微线程,英文名称为 coroutine。一个进程可以有多个线程,一个线程可以有多 个协程,这是协程和线程间的关系。不同的是,线程由系统调度,但协程需要自己调度,协 程运行在用户态。

    19丨如何用协程来优化多线程业务?.html

    19丨如何用协程来优化多线程业务?.html

    python3多进程多线程协程IO多路复用等

    对python并发进行的笔记整理,个人所学习使用,主要包括多进程,多线程,协程,IO多路复用,进程线程通信等

    Python基于多线程协程的文献下载器源码.zip

    Python基于多线程协程的文献下载器源码.zip

    详解python多线程、多协程.zip

    详解python多线程、多协程.zip python除了线程的概念以外,还有协程的概念.今天来讲下

    Python中协程用法代码详解

    协程,又称微线程,纤程。英文名Coroutine。 首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元。 为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换...

Global site tag (gtag.js) - Google Analytics