0

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

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

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

4

1 回答 1

2

所有的休眠方法都会休眠至少 1 毫秒。您可以使用更短但通常不会放弃 CPU 的 yield()。

如果您忙于等待一组套接字,您最终将使用整个 cpu,或者您将有毫秒级的延迟。

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

于 2013-01-08T15:19:37.610 回答