从套接字流读取时是不是需要线程睡眠?

Posted

技术标签:

【中文标题】从套接字流读取时是不是需要线程睡眠?【英文标题】:Is thread sleep necessary when reading from a socket stream?从套接字流读取时是否需要线程睡眠? 【发布时间】:2013-09-15 18:31:00 【问题描述】:

我正在从这样的套接字输入流中读取数据

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;

while((line = in.readLine()) != null)
   // do something
   Thread.sleep(10); // for example 10ms

现在,the read method of an input stream 会阻塞直到数据可用。

在这种情况下冷却线程是个好主意吗? 10ms 后它无论如何都会阻塞。

请不要告诉我关于非阻塞 IO 的事情,我知道。

我只是好奇它是否有助于提高性能/CPU。

【问题讨论】:

您为什么认为它可能有助于提高性能? 如果输入流是非阻塞的,那么这是您应该在问题中包含的重要信息。 它不是阻塞输入流,@Raedwald 我认为它可能会像 shem 提到的那样对 os 线程调度产生影响。 【参考方案1】:

。没有理由睡觉。为什么人为地减慢读取循环?让它尽可能快地读取数据。

【讨论】:

【参考方案2】:

如果你想让其他线程一个cpu时间,你应该使用:

Thread.yield();

但我认为这里没有必要——让系统线程调度完成它的工作——这非常好。

【讨论】:

以上是关于从套接字流读取时是不是需要线程睡眠?的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 应用程序从流套接字读取数据不可理解

如何从套接字读取流数据集?

在后台线程上执行异步套接字

C ++ Win套接字睡眠错误?

线程睡眠冻结了我的代码。 Java 客户端-服务器通信

通过套接字流发送对象