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.
  • 相关阅读:
    玩转Visual Studio Editor篇
    .Net2.0的集合操作 What i know?
    Log文件压缩
    [转]比较高效地实现从两个不同数组中提取相同部分组成新的数组(只支持Int类型) [C#]
    Stream 和 Byte[]互操作
    net 2.0 中如何在线程引发的事件中控制forms controls
    C# 操作Word文档(转)
    利用Lucene.net搜索引擎进行多条件搜索的做法
    c# 添加图片水印,可以指定水印位置+生成缩略图
    SDN第一次作业
  • 原文地址:https://www.cnblogs.com/attilax/p/15199392.html
Copyright © 2011-2022 走看看