【发布时间】:2014-02-03 20:03:49
【问题描述】:
我正在尝试理解非阻塞 Web 服务器的概念,但似乎有些我想念的东西。
我可以理解“阻止”网络请求(伪代码)有几个原因:
-
CPU 限制
字符串 on_request(arg)
{
DO_SOME_HEAVY_CPU_CALC
返回“完成”;
} -
IO 绑定
字符串 on_request(arg)
{
DO_A_CALL_TO_EXTERNAL_RESOURCE_SUCH_AS_WEB_IO
返回“完成”;
} -
睡觉
字符串 on_request(arg)
{
睡眠(VERY_VERY_LONG_TIME);
返回“完成”;
}- 这三个都可以从非阻塞服务器中受益吗?
- 确实受益于非阻塞 Web 服务器的情况如何真正做到这一点? 我的意思是,在查看 Tornado 服务器文档时,似乎 喜欢它“释放”线程。我知道可以让线程进入睡眠状态 并等待来自操作系统的信号(至少在 Linux 中), 这是“释放”线程的含义吗?这是不是更高一些 水平执行?实际上创建一个新线程的东西 是在等待新请求而不是“休眠”请求?
- 我在这里遗漏了什么吗?
谢谢
【问题讨论】:
标签: asynchronous operating-system tornado nonblocking