gpt4 book ai didi

java - 套接字:当程序在收到 read() 消息时未被阻塞时会发生什么

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:58 24 4
gpt4 key购买 nike

在 Socket 编程中,无论您是用 C 还是 java 编写代码,都假设以下场景。

客户端的代码类似于:

while(1) {
read(...);
/* process received msg */
process(received_msg)
}

现在,客户端收到了msg1,正在忙着处理它。这意味着处理器现在正在 process() 中运行一些指令。此时,msg2 到达。但是,现在没有 read() 阻塞来接收它。现在传入的消息 msg2 会发生什么情况?

是否依赖于协议(protocol)?它取决于语言 api 吗?

我想如果我每次收到消息都创建一个新线程,我可以解决这个问题。我的问题旨在了解在单线程上下文中会发生什么,以及是否有任何方法可以在不使用多线程的情况下完成这项工作。

最佳答案

What happens to the incoming message msg2 now?

它是缓冲的。

Does it depend on the protocol?

我描述的是 TCP,但 UDP 也是如此。然而,缓冲区填满时的行为对于 TCP 和 UDP 是不同的:TCP 停止发送者; UDP 丢弃下一个数据报。

Does it depend on the language api?

没有。

I think if I make a new thread every time I receive a message I can overcome this issue.

没有问题需要克服。

关于java - 套接字:当程序在收到 read() 消息时未被阻塞时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39950192/

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