zoukankan      html  css  js  c++  java
  • 协程 泽桐

    引言:
    对于单线程下,我们不可避免程序中出现io操作,但如果我们能在自己的程序中(即用户程序级别,而非操作系统级别)控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另外一个任务去计算,这样就保证了该线程能够最大限度地处于就绪态,即随时都可以被cpu执行的状态,相当于我们在用户程序级别将自己的io操作最大限度地隐藏起来,从而可以迷惑操作系统,让其看到:该线程好像是一直在计算,io比较少,从而更多的将cpu的执行权限分配给我们的线程。
    协程的本质就是在单线程下,由用户自己控制一个任务遇到io阻塞了就切换另外一个任务去执行,以此来提升效率。为了实现它,我们需要找寻一种可以同时满足以下条件的解决方案:

    #1. 可以控制多个任务之间的切换,切换之前将任务的状态保存下来,以便重新运行时,可以基于暂停的位置继续执行。

    #2. 作为1的补充:可以检测io操作,在遇到io操作的情况下才发生切换
    介绍:
    协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。
    单线程实现并发用协程:
    单线程开协程适用于IO密集型,不适用于计算密集型;遇到IO再切换才有意义
    优点:
    1. 协程的切换开销更小,属于程序级别的切换,操作系统感知不到,因而更加轻量级
    2. 单线程内就可以实现并发的效果,最大限度地利用cpu

    例子:协程实现单线程多并发FTP程序:http://www.cnblogs.com/linzetong/p/8297834.html

    转至:http://www.cnblogs.com/linhaifeng/articles/7429894.html

  • 相关阅读:
    frame、window和dialog区别
    wxWidgets窗口类型
    C++中类与结构体的区别
    c++中explicit关键字用法
    解决error C2011: 'fd_set' : 'struct' type redefinition的方法
    jrtplib源码分析 第一篇 jthread的编译与分析
    详解大端模式和小端模式
    C++——重点复习
    Linux组件封装(九)——EchoLib的一些简单综合
    Linux组件封装(八)——Socket的封装
  • 原文地址:https://www.cnblogs.com/linzetong/p/8315372.html
Copyright © 2011-2022 走看看