【问题标题】:Why isn't http server consuming a lot of CPU? [closed]为什么http服务器不消耗大量CPU? [关闭]
【发布时间】:2016-03-26 16:55:53
【问题描述】:

服务器应该尽快响应,服务器进程不是一直在轮询是否有请求吗? 所以,它想要一个while循环。但是为什么没有访问,CPU(单核)没有全部消耗呢?

【问题讨论】:

  • 您需要提供更多详细信息,例如什么服务器软件及其配置方式。一般来说,服务器不会主动轮询,当有新的连接/数据可用时,它们会让操作系统通知它们。在那之前他们只是睡觉。
  • @kicken 非常抱歉,我对服务器细节了解不多;我的意思是一般的直觉。你的意思是像硬件中断这样的机制吗?

标签: performance http networking polling


【解决方案1】:

服务器进程不是一直在轮询吗?

如果这是一个合理的实现,则不会。

HTTP 服务器和通信服务器的实现有很多,而轮询对于其中的任何一个都不是合适的架构。

例如,一些服务器依赖于使用事件、回调等的异步 I/O 操作。其他实现在多线程模式下运行时依赖于阻塞套接字 API,并且可能还有其他架构......

【讨论】:

  • 对于使用阻塞套接字API,当阻塞时,进程停止并且不消耗CPU;是吗?
  • @heLomaN - 没错。
  • 对于使用asynchronous I/O,请求会触发一些动作来处理它们。没有while主循环,但是为什么进程没有终止呢?程序式编程的软件即使注册了一些回调,也应该在运行后退出;那么不运行时如何调用呢?
  • @heLomaN - 答案取决于操作系统和实现。我建议您阅读有关异步 I/O 的内容以满足您的特定要求。
【解决方案2】:

如果有请求,服务器进程不是一直在轮询吗?

没有。它在accept() 调用或select() 调用中阻塞。没有投票。

【讨论】:

  • FTR,还有其他选项(可能更有可能),例如 epoll_wait() -- 如果我们不是在谈论 Windows。
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2018-11-01
相关资源
最近更新 更多