gpt4 book ai didi

java - Java 中的非阻塞套接字写入与阻塞套接字写入

转载 作者:可可西里 更新时间:2023-11-01 02:31:35 26 4
gpt4 key购买 nike

为什么有人更喜欢阻塞写而不是非阻塞写?我的理解是,如果你想确保另一方在 write 方法返回后得到 TCP 数据包,你只会想要阻止写入,但我什至不确定这是可能的。您将不得不刷新,而刷新将不得不刷新底层操作系统写入套接字缓冲区。那么非阻塞套接字写有什么缺点吗?就性能而言,拥有一个大的底层写套接字缓冲区是不是一个坏主意?我的理解是,底层套接字写入缓冲区越小,当底层套接字缓冲区已满且 isWritable() 返回 false 时,您就越有可能遇到缓慢/错误的客户端,并且必须在应用程序级别丢弃/排队数据包。

最佳答案

My understanding is that you would only want blocking write if you want to make sure the other side got the TCP packet once the write method returned

你的理解有误。它并不能确保这一点。

阻塞写入阻塞,直到所有数据都已传输到套接字发送缓冲区,数据从那里异步传输到网络。如果reader慢了,他的socket receive buffer会被填满,最终会导致你的socket send buffer被填满,从而导致blocking write阻塞,阻塞整个线程。非阻塞 I/O 为您提供了一种检测和处理这种情况的方法。

关于java - Java 中的非阻塞套接字写入与阻塞套接字写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com