繁体   English   中英

Java事件循环,轻轻地睡觉

[英]Java event loop, sleep “gently”

我正在做一种事件循环来处理Java中的多个非阻塞套接字。 问题是,当我不接触循环时,它使用整个核心。 (例如,我有一个四核,每次启动我的程序时,CPU每次都会跳到25%。)

我知道我可以使用Thread.sleep()来减慢处理器的使用速度,但我想知道是否有一种正确的方法。 我觉得Thread.sleep(1)可能会限制我的事件循环。

所以我的问题是,我应该怎么做? 有没有正确的方法呢? 我应该减少线程的优先级吗? 我应该使用Thread.sleep(0,someNanosecondsAmount)吗?

所有睡眠方法将在1 ms内至少休眠。 您可以使用较短但通常不会放弃CPU的yield()。

如果你正忙着等待一组套接字,你将最终使用整个cpu,否则你将有毫秒级的延迟。

一个更好的解决方案是使用Selector等待Socket准备好使用或使用每个连接的线程阻止NIO。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM