zoukankan      html  css  js  c++  java
  • 老张喝茶 教你同步异步 阻塞与非阻塞

    老张爱喝茶,废话不说,煮开水。

    出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

    1 老张把水壶放到火上,立等水开。(同步阻塞

    老张觉得自己有点傻

    2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞

    老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。

    3 老张把响水壶放到火上,立等水开。(异步阻塞

    老张觉得这样傻等意义不大

    4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞

    老张觉得自己聪明了。


    所谓同步异步,只是对于水壶而言。

    普通水壶,同步;响水壶,异步。

    虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。

    同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

    所谓阻塞非阻塞,仅仅对于老张而言。

    立等的老张,阻塞;看电视的老张,非阻塞。

    情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

    程序员写程序,很多情况下,老张和水壶都要涉及,即调用者与被调用者。四种组合模式各有所长。

    这个例子和银行排队有异曲同工之妙,可是我觉得这个会比较容易理解一些。

    老张一次比一次聪明,我承认跟老张很像。刚开始的情况逻辑比较简单,但效率低下。随着慢慢的提高,效率也提高了。所以个人认为,程序的效率和简单程度是成反比的。

    但不是说异步非阻塞就一定是最好的,有的情况下更适合使用同步或者阻塞。

    己有能 勿自私 人所能 勿轻訾 jogger0703@gmail.com
  • 相关阅读:
    CodeForces 659F Polycarp and Hay
    CodeForces 713C Sonya and Problem Wihtout a Legend
    CodeForces 712D Memory and Scores
    CodeForces 689E Mike and Geometry Problem
    CodeForces 675D Tree Construction
    CodeForces 671A Recycling Bottles
    CodeForces 667C Reberland Linguistics
    CodeForces 672D Robin Hood
    CodeForces 675E Trains and Statistic
    CodeForces 676D Theseus and labyrinth
  • 原文地址:https://www.cnblogs.com/max5945/p/2706673.html
Copyright © 2011-2022 走看看