【发布时间】:2017-05-16 00:41:45
【问题描述】:
我有一个 C# 中的控制台服务器,它一直在 while(true) 循环中运行。但这需要> 50%的CPU,即使它什么都不做。我试过 Thread.Sleep 它工作!不再吃我的 CPU,但是它不会在指定的确切时间恢复,并且不被认为是好的做法。我在做正确的事吗?或者除了使用 while(true) 和 Thread.Sleep 还有其他方法吗?
【问题讨论】:
-
循环在做什么?通常你会等待某种事件发生,而不是忙循环或使用
Thread.Sleep() -
您希望循环在什么条件下执行或暂停?
-
这是服务器的主循环。它将处理所有游戏逻辑。它还需要检查是否有挂起的连接。所以它不听任何事件。它触发事件。但是,如果循环没有做任何事情或负载不足,它不仅会加快游戏速度(可以处理),而且还会消耗 > 50% 的 CPU,基本上什么都不做。
-
@SamiKuhmonen 所以我想当你不听任何事件时使用 Thread.Sleep 也不错?
-
如果它正在接受连接,那么这些是事件,应该这样处理。但当然,如果你愿意,你可以推着睡在那里。它比忙循环要好,但不如使用事件做事,事件可以是计时器或其他来源。
标签: c# multithreading loops server