Java中的非阻塞套接字写与阻塞套接字写

发布于 2021-01-30 16:10:38

为什么有人会喜欢阻止写而不是非阻止写?我的理解是,仅当您想确保写方法返回后,另一端获得了TCP数据包时,才希望阻止写操作,但是我什至不知道这是可能的。您将必须刷新,而刷新则必须刷新
底层操作系统的写套接字缓冲区
。那么,无阻塞套接字写是否有任何缺点?就性能而言,拥有较大的底层写套接字是否会缓冲一个不好的主意?我的理解是,底层套接字写缓冲区越小,当底层套接字缓冲区已满且isWritable()返回false时,您越有可能遇到慢速/忙碌的客户端,并且不得不丢弃/排队应用程序级别的数据包。

关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    我的理解是,仅当您要确保写方法返回后,另一方获得了TCP数据包时,才希望阻止写操作

    您的理解不正确。它不能确保这一点。

    阻塞写入会阻塞,直到所有数据都已传输到套接字发送缓冲区,然后再从那里异步传输到网络。如果读取器运行缓慢,则其套接字接收缓冲区将被填满,最终将导致套接字发送缓冲区被填满,这将导致阻塞写阻塞,从而阻塞整个线程。非阻塞I
    / O为您提供了一种检测和处理这种情况的方法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看