zoukankan      html  css  js  c++  java
  • paip.提升性能---协程“微线程”的使用.

    paip.提升性能---协程的使用.

    近乎无限并发的“微线程”

    作者Attilax  艾龙,  EMAIL:1466519819@qq.com
    来源:attilax的专栏
    地址:http://blog.csdn.net/attilax

    协程,又称微线程和纤程等,Fiber,即纤程..协程有时也被叫做用户态线程..据说源于 Simula 和 Modula-2 语言(
    现代编程语言基本上都有支持,比如 Lua、ruby

    协程是用户空间线程,操作系统对其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。其实用协程来做的东西,用线程或进程通常也是一样可以做的,但往往多了许多加锁和通信的操作。


    ////协程有三个好处:

    避免了传统的函数调用栈,使得无限递归成为可能
    用户态的线程调度,极大降低上下文切换的开销,使得近乎无限并发的“微线程”成为可能
    由于可以在用户态进行手工线程调度,这样可以避免锁机制
    其实这里的“微线程”、纤程、协程,甚至用户态线程,其实可以理解为都是一码事,只是实现和概念的区别。

    协程的优点:
    1. 消耗小, 切换快, 一个进程可以创建成千上万个协程,   Erlang.
    2. 小任务顺序编程很符合人的思维方式, 规避纯异步编程中状态机的复杂性. 使得使用协程写的程序将更加的直观, 逻辑描述方便, 简化编程.纤程用于化异步为同步, 你可以进行一个异步操作以后就切换纤程,等到异步操作完成以后在切换回来,这样,在逻辑上相关的代码就可以写到一个函数里面,而不用人为的分到多个回调函数中。
    3. 没有了线程所谓的安全问题, 避免锁机制


    ////////协程的缺点:
     自己实现的协程不是语言原生支持的,不能像Erlang那样公平调度,也不能像Go语言那样自动扩展栈空间,所以是有一定局限性的。
    4. 协程一般只支持所有的协程函数在一个线程里面跑. 无法充分利用多核CPU, 除非把所有的IO和计算操作都剥离成单独的线程.


    ////kilim  framework.
  • 相关阅读:
    Teradata 奇淫技巧
    Java
    搬砖
    js 判断2个对象的值是否相等
    搬砖
    UnsupportedClassVersionError: JVMCFRE003 commons/text/StringEscapeUtils
    杂记
    java查找最新文件
    搬砖
    搬砖
  • 原文地址:https://www.cnblogs.com/attilax/p/5964149.html
Copyright © 2011-2022 走看看