zoukankan      html  css  js  c++  java
  • 协程

    协程

    1. 协程介绍

    协程又称微线程,从名字可以看出,协程的粒度比线程更小,并且是用户管理和控制的,多个协程可以运行在一个线程上面。那么协程出现的背景又是什么呢,先来看一下目前线程中影响性能的特性:

    • 使用锁机制
    • 线程间的上下文切换
    • 线程运行和阻塞状态的切换

    以上任意一点都是很消耗cpu性能的。相对来说协程是由程序自身控制,没有线程切换的开销,且不需要锁机制,因为在同一个线程中运行,不存在同时写变量冲突,在协程中操作共享资源不加锁,只需要判断状态就行了,所以执行效率比线程高的多。

    2. 主流语言对协程的支持

    Lua语言

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

    Python语言

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

    Go语言

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

    Java语言

    如上文所说,Java语言并没有对协程的原生支持,但是某些开源框架模拟出了协程的功能,有兴趣的小伙伴可以看一看Kilim框架的源码:

    https://github.com/kilim/kilim

    C/C++

    c/c++需要自己借助ucontext、setjmp、longjmp库实现,微信开源了c/c++的协程库libco。



  • 相关阅读:
    POJ-1035 Spell checker---字符串处理
    hdu-3572 Task Schedule---最大流判断满流+dinic算法
    BZOJ4826: [Hnoi2017]影魔
    BZOJ4825: [Hnoi2017]单旋
    BZOJ3504: [Cqoi2014]危桥
    BZOJ4407: 于神之怒加强版
    BZOJ2818: Gcd
    BZOJ4542: [Hnoi2016]大数
    BZOJ4540: [Hnoi2016]序列
    BZOJ4537: [Hnoi2016]最小公倍数
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/10335736.html
Copyright © 2011-2022 走看看