【问题标题】: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 线程调度产生影响。

标签: java multithreading sockets io


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Thread.yield();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 2015-07-12
      相关资源
      最近更新 更多