zoukankan      html  css  js  c++  java
  • 同步异步,阻塞非阻塞的相关说明

    关于阻塞与非阻塞 同步与异步的区别:一般来说IO分为两个阶段,

    第一阶段是等待数据阶段,

    第二阶段是内核空间的数据拷贝到用户空间,假设一个线程(或是进程)P准备执行一个IO操作的话它会经历以下过程:

    第一阶段:

    P发出一个IO请求,这时候会有两种情况: 1:立刻返回: 非阻塞 2:一直等待,P调用sleep/wait休眠或是挂起,让出CPU给别的线程/进程 阻塞

    第二阶段:

    这时内核的数据终于准备好了, 那么现在用户进程想要读取内核空间的数据有两种方式: 1: P自己把数据从内核空间拷贝到用户空间 同步

    2:P创建一个线程做数据copy的工作 异步 现在应该明白了吧。阻塞/非阻塞是针对IO的第一阶段的描述。异步/同步是针对IO的第二阶段的描述也就是IO的主体。

    这里主要比较难理解的就是同步/异步。首先P在发起IO的请求的时候如果P本身还要负责IO请求后的数据copy(内核空间到用户空间)工作。那么我们就可以说是同步的。

    如果P在发起IO操作后数据copy的工作由内核线程/进程或是P自己再创建一个线程/进程去完成,那么我们就可以称之为异步

  • 相关阅读:
    P1099 [NOIP2007 提高组] 树网的核
    UVA 数学题选做
    Codeforces 729 Div.2
    P1600 [NOIP2016 提高组] 天天爱跑步
    CF1106F Lunar New Year and a Recursive Sequence
    P6091 【模板】原根
    P4774 [NOI2018] 屠龙勇士
    P1106 删数问题
    P1209 [USACO1.3]修理牛棚 Barn Repair
    网络(network)
  • 原文地址:https://www.cnblogs.com/anqli-java/p/9929503.html
Copyright © 2011-2022 走看看