为什么有人更喜欢阻塞写入而不是非阻塞写入?我的理解是,如果您想确保另一方在 write 方法返回后收到 TCP 数据包,则只需要阻止 write,但我什至不确定这是否可能。你必须冲洗并且冲洗必须冲洗底层操作系统写套接字缓冲区。那么非阻塞套接字写入有什么缺点吗?就性能而言,拥有大型底层写入套接字缓冲区是否是一个坏主意?我的理解是,底层套接字写入缓冲区越小,您就越有可能遇到缓慢/有问题的客户端,并且当底层套接字缓冲区已满且 isWritable() 返回 false 时,必须在应用程序级别丢弃/排队数据包。
我的理解是,如果您想确保另一方在 write 方法返回后收到 TCP 数据包,则只需要阻止 write
你的理解是不正确的。它并不能确保这一点。
阻塞写入会阻塞,直到所有数据都传输到套接字发送缓冲区,然后从该缓冲区异步传输到网络。如果reader很慢,他的socket接收缓冲区会被填满,这最终会导致你的socket发送缓冲区被填满,这会导致阻塞写入阻塞,阻塞整个线程。非阻塞 I/O 为您提供了一种检测和处理这种情况的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)