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

  • 相关阅读:
    itk_interior
    itk_option define
    scrolled canvas tcl tk
    init.rc的disabled含义
    WIFI分析与移植
    ubuntu10.04命令挂载windows硬盘与U盘
    Android WIFI 分析
    Android WIFI 分析
    Android平台开发WIFI function portingWIFI功能移植
    Android平台开发WIFI function portingWIFI功能移植
  • 原文地址:https://www.cnblogs.com/linzetong/p/8315372.html
Copyright © 2011-2022 走看看