zoukankan      html  css  js  c++  java
  • 同步/异步--堵塞/非阻塞

    同步/异步,堵塞/非阻塞的概念:

    同步/异步:被调用者是否返回消息,只与被调用者有关

    堵塞/非阻塞:程序在等待调用结果时的状态,只与调用者有关


    概念与程序的对应:

    同步:不返回消息,程序要么卡在那看着执行完(堵塞),要么向下执行,不过要时不时的回去看一下执行完了没(非堵塞)

    异步:返回消息,程序当然也可以卡在那,等着接受返回的消息(堵塞),不过一般都是接着向下执行,之后只要接受消息就行(非堵塞)


    程序的实现:

    同步堵塞:等待return

    同步非堵塞:并发,用多线程实现,主线程接着向下走,子线程去执行调用;

    异步堵塞:没人干这种事,人家都说了做完会通知你的,你还傻傻的蹲在这等着

    异步非堵塞:大家都这么干,这才是正常的好嘛


    额外说一下同步非堵塞:

    虽然感觉怪怪的,因为一般调用者的后续依赖这被调者的返回值,而多线程是不依赖的;如果依赖的话,只能用同步堵塞了,不依赖的话,同步非堵塞还行;

    不过都是非堵塞,那么和异步非堵塞的区别在哪?

    还是回到最初的概念上,异步非堵塞的本质是callback,即完成后通知,而多线程的话,完成了就完成了,不通知(非要通知谁也拦不住你)


    再重点说下异步:

    为什么要用异步,而放着多线程不用?

    只是某些情况下异步好用,而非全部时间,这个情况就是处理阻塞的时候:

    手动对堵塞进行异步操作,这样主程序对于cpu来讲一直是就绪的状态;

    而如果是多线程,那么遇到堵塞,就会将主线程挂起,切换到以外一个任务


    python中有三个模块用来实现异步:asyncio、aiohttp、twisted

    还有两个关键字:async和await

  • 相关阅读:
    实战-rsync+inotify打造文件实时备份
    实战-Mysql5.6.36脚本编译安装及初始化
    实战-CentOS6.8配置nfs服务
    CentOS7操作系统初始化
    docker搭建 SonarQube代码质量管理平台
    ubuntu 教程
    前端图表库
    WebSSH2安装过程可实现WEB可视化管理SSH工具
    devops 自动化平台网址
    AIops 智能运维平台
  • 原文地址:https://www.cnblogs.com/justaman/p/11479008.html
Copyright © 2011-2022 走看看