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。

  • 相关阅读:
    docker-compose 命令不存在
    linux安装rabbitmq ssm集成rabbitmq
    tomcat参数错误 服务器400
    无限极分内 自联查询
    图片移入变大 点击图片切换 点击按钮显示图片
    js正则表达式基本书写
    随鼠标移动
    输入电话号码
    添加新句子
    窗口的弹出与关闭
  • 原文地址:https://www.cnblogs.com/scuwangjun/p/9965066.html
Copyright © 2011-2022 走看看