从套接字流读取时是不是需要线程睡眠?
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();
但我认为这里没有必要——让系统线程调度完成它的工作——这非常好。
【讨论】:
以上是关于从套接字流读取时是不是需要线程睡眠?的主要内容,如果未能解决你的问题,请参考以下文章