美文网首页
API中的阻塞与非阻塞、同步与异步

API中的阻塞与非阻塞、同步与异步

作者: 徐瑞涛 | 来源:发表于2016-06-13 02:00 被阅读758次

在谈论一个API的行为时,经常会用到下面两组修饰词:

  • 阻塞(blocking)与非阻塞(non-blocking)
  • 同步(sync)与异步(async)

大多数情况下,阻塞意味着同步,非阻塞意味着异步。既然含义相同,为什么使用两组词汇来描述呢?答案是角度不同

API用户关心的是从API请求发出到执行完成,自己的线程是否被阻塞。而API实现者在接收到请求后,需要作出决策:1. 在当前线程立即执行,造成阻塞;2. 记录请求,另起线程稍后执行。立即被称为同步稍后被称为异步。同步、异步指实现方式,阻塞、非阻塞指API的语义形式。实现者往往同时提供两种API语义,底层复用一种实现方式。

// 同步方式提供两种语义
void BlockApi() {
    SyncOperation()
}

void NonBlockApi() {
    PushRequestToQueue()
}
void WorkerThread() {
    while (true) {
        request = FetchRequestFromQueue()
        SyncOperation()
    }
}
// 异步方式提供两种语义
void BlockApi() {
    future = AsyncOperation()
    future.Wait()
}

void NonBlockApi() {
    AsyncOperation()
}

API语义之所以出现从阻塞到非阻塞的演进,最主要的原因是I/O(磁盘I/O、网络I/O)速度与CPU速度之间的差距越来越大,引入非阻塞API既可以减少浪费在空等上的CPU时间,提高CPU利用率,又有利于增大I/O并发度,提高I/O设备的利用率。

相关文章

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • Linux网络IO模型

    什么是同步与异步、阻塞与非阻塞 引用知乎 怎样理解阻塞非阻塞与同步异步的区别? 上面的一个回答,很生动的说明了同步...

  • 同步异步和阻塞非阻塞_190220

    简介 一个知乎连接说的很好作者:严肃链接:同步异步和阻塞非阻塞来源:知乎“阻塞”与"非阻塞"与"同步"与“异步"不...

  • 谈论:同步异步阻塞非阻塞.md

    同步/异步:关注的方式(是否主动) 阻塞/非阻塞: 同步阻塞BIO: 同步非阻塞NIO: 异步非阻塞: 异步阻塞:

  • 01 基本概念

    同步 异步 阻塞 非阻塞 同步与异步关注的是消息通信机制,阻塞与非阻塞关注的是程序在等待调用结果(消息,返回值)时...

  • 聊聊Linux 五种IO模型【转载】

    上一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两个概念点了,没有看过...

  • 聊聊Linux 五种IO模型

    上一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两个概念点了,没有看过...

  • I/O模型笔记

    #0 同步异步、阻塞非阻塞 同步异步是从消息通知机制角度来说的 阻塞与非阻塞是从程序(线程)等待消息通知时的状态角...

  • Netty基础-JAVA IO模型

    java - IO模型 BIO NIO AIO 同步与异步,阻塞与非阻塞 同步与异步是面向多个线程协作的情况。 假...

  • NIO基础之同步、异步、阻塞、非阻塞

    这里区分几个概念,也是常见但是容易混淆的概念,就是标题中的同步、异步、阻塞、非阻塞。 一、同步与异步 同步与异步,...

网友评论

      本文标题:API中的阻塞与非阻塞、同步与异步

      本文链接:https://www.haomeiwen.com/subject/mmfydttx.html