• dingdongfm
    2019-10-15
    阻塞、非阻塞和同步、异步其实针对的对象是不一样的。
    阻塞、非阻塞说的是调用者;
    同步、异步说的是被调用者。

    同步请求,A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A。
    异步请求,A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知A。
    所以说,同步和异步最大的区别就是被调用方的执行方式和返回时机。同步指的是被调用方做完事情之后再返回,异步指的是被调用方先返回,然后再做事情,做完之后再想办法通知调用方。

    阻塞请求,A调用B,A一直等着B的返回,别的事情什么也不干。
    非阻塞请求,A调用B,A不用一直等着B的返回,先去忙别的事情了。
    所以说, 阻塞和非阻塞最大的区别就是在被调用方返回结果之前的这段时间内,调用方是否一直等待。阻塞指的是调用方一直等待别的事情什么都不做。非阻塞指的是调用方先去忙别的事情。
    展开
     1
     10
  • HaydnSyx
    2019-10-13
    老师,什么是水平触发?什么是边缘触发?能否举个例子说明一下呢

    作者回复:
    水平触发:
         点单后,菜(数据)做好了,服务员端上来问吃不吃(读),你不吃或者吃不完,她过会还会端过来问你吃不吃,提醒你,还没吃完,可以继续吃,反反复复。

    边缘触发:
         服务员端上菜后,你一次没有吃完,好了,等你想吃剩下的时候,也别吃了,除非再点菜,才能吃到刚没吃完的。

     1
     9
  • 当猪真快活
    2019-12-01
    水平触发和边缘触发,适用场景是什么?

    作者回复: 边缘触发相当于高速模式,理论上效率更高,但是复杂度也高,所以现在大多应用(Redis等)还是默认水平触发,如果追求要更好的性能、同时有信心编码好,可以尝试使用边缘触发,例如nginx。
    另外,还有点注意的是边缘触发只支持非阻塞模式。

    
     2
  • lwenbin
    2019-10-11
    老师,您好
    三种模式中的第二种,点单等待被叫是否有些小问题?NIO中还是要自己用selector去查询事件是否就绪的,没有事件就绪时查询会阻塞在那里,这个是否和“点单等待被叫”有些不同?
    谢谢!

    作者回复: 阻塞的主体不同,这个selector你可以理解成点单的吧台,你去点单了,给你个号码,等于注册了一个事件,然后吧台记录下来了,等菜好了,就喊这个号码了。selector本身的阻塞不是我们读写数据时候的阻塞,是他在等待事件就绪的阻塞,比如菜也没好,吧台就等着,和我们数据阻塞不是一个主体。

     3
     2
  • 大数据小先
    2019-11-28
    老师,只会简单的Java,学这个课程吃力吗?要不要先学学Java网络编程方面的知识

    作者回复: 我觉得可能会吃力,但是也不定会太吃力,如果有时间,先学点java网络编程比较好,因为课程默认有点基础了,所以你可以看看课程git repo资料里面,有个直播的pdf里面有些推荐的书,其中java网络编程推荐的第二本,下个电子版的看看。那本书页数很少。但是很好,也不花钱,网上有pdf.

    
     1
  • DJZhu
    2020-01-20
    关于老师提到的水平触发,边缘触发,前面的评论给出了很形象的解释。我尝试从“水平”和“边缘”的由来再解释一次。

    水平触发和边缘触发借鉴的是电子触发的概念。在各种数字电子元器件中,输出是随着输入变化而逻辑变化的,最常见的有“与电门”。在与电门中,两个输入的电极同为正电压(真),则输出一个正电压(真);任意一个输入的电位变成负电压(假),则输出一个负电压(假)。问题在于,什么时候触发电位的变化呢?有两种方案:
    1. 在一个输入的电位变化时(边缘触发)
    2.在输入的电位状态变成目标状态时(水平触发)
          _______
    ____| |__
        (1) (2)

    你可能会问,这不是一个概念么?在电子学的概念里,不是。而在这里,网络通信借鉴了这个概念,将消息到达后,读取(触发)的时机形象地分为“水平触发”和“边缘触发”。边缘触发是指消息到来的时刻进行消费,如果一次到达的消息超过了一次消费的最大值,剩余的消息不会被继续消费(类似于高电位保持并不会边缘触发的输出变法),要消费这一部分消息要么等到下一次消息的到来,要么在这次消费之后主动触发消费剩余消息。至于水平触发,则是以是否有剩余消息为标准,有剩余,就一直主动消费直到无消息。
    展开

    作者回复: 补充的很赞👍,谢谢

    
    
  • 云师兄
    2020-01-16
    Linux为什么没有学习采纳win的aio成熟方案呢?是这个方案与linux的设计理念有冲突吗?linux系统很多概念也都是学习过来的

    作者回复: 这两个系统完全是两套系统,最本质的问题在于linux的aio还是基于epoll,用epoll来模拟的,所以性能优势/复制的性价比并不高,既然不高,用的人就少,用的人少,自然就问题多,所以自然成熟度没有windows下的AIO高。
    为什么不搞的更好(学习windows)?不考虑能不能学(毕竟系统不同),我觉得需要时间来演进和发展,就像从bio到nio也需要了一段时间,同样aio肯定也需要发展,或者说以后直接演进成其他更好的模式都是有可能的。

    
    
  • 小不点
    2019-12-06
    看到后面回头重温捡漏一遍,当被监控的文件有可读写事件发生时,epoll_wait()会通知处理程序去读写,如果这次没有把数据一次性全部读写完的话,水平触发:那么下次调用 epoll_wait()时通知你上次没读写完,如果一直不处理它会一直通知你;边缘触发:下次调用 epoll_wait()的时候不会通知你,也就是只通知一次,知道该文件上出现第二次可读写事件才会通知,效率比水平触发要高,结合老师给楼上举例吃饭的生活场景就好理解多了
    
    
  • 刘伟
    2019-11-28
    这照片是合肥思科旁边的食堂吧
    
    
  • 徐文锋
    2019-11-05
    打饭端菜这三个例子很适合java的同步调用,异步调用,和回调的场景化解释
    
    
  • whosyourdaddy
    2019-10-16
    老师讲的很有意思
    
    
  • 加载中……
    2019-10-14
    老师好,有个问题想请教下:
    Netty对NIO支持有三种实现:common、linux、Mac/BSD。
    是不是linux、Mac/BSD只能在相应的OS下使用,不能随便用。而common既可以在linux也可以在Mac/BSD使用?

    作者回复: 是的,就像有的人全栈一样,什么都会一点,但是有的人只专一门,但是精通一样,一个通用一个专用的问题

    
    
  • gogo
    2019-10-12
    叫老师好呢 还是叫健哥好呢?

    老师,视频里提到 linux下的aio实现不够成熟, 应该怎么理解啊?

    作者回复: 主要移除原因还是性能在linux下没优势,后来想重新引入,但是前提是要证明有很大性能优势。关键移除后,一般人没动力再搞再研究再证明了

     1
    
  • Gary
    2019-10-10
    windows的aio比较成熟,指的是iocp模型的成熟吗?

    作者回复: 是的

    
    
  • henry
    2019-10-10
    三种io模式比喻太形象了

    作者回复: 尽量贴近生活来讲解,或许深究起来不够严谨,但是容易理解,也好记点。呵呵

    
    
我们在线,来聊聊吧