非阻塞http服务器,java nio,python tornado eventlet
作者:互联网
你好
我试图了解基于龙卷风/ eventlet的http服务器是否优于线程服务器.在浏览主题时,我看到它们是单线程事件基础服务器,在套接字上执行select / poll / epoll之后运行单个处理程序功能.
>我的第一个问题是,这个龙卷风/事件集是否类似于Java中的nio库,并且是非阻塞且快速的Java nio服务器.
>我的第二个问题是,由于基于事件的服务器是单线程的,因此如果文件io或solw客户端上的一个连接块将挂起整个服务器
>我的第三个问题是,要取舍什么,如果非阻塞服务器速度很快,为什么它比apache更常见
这些问题是相关的,我很感激,因为我没有正确理解这些问题
谢谢
解决方法:
如果您所有的库都提供非阻塞api,则非阻塞服务器是最佳选择.正如您在第二个问题中提到的那样,如果某个库被阻止(例如,数据库lib进行了阻止调用),则整个进程/线程都会被阻止并且系统挂起.并非所有可用的库都是异步的,这使得很难在所有用例中使用龙卷风/事件.同样,在多核机箱中,需要启动多个非阻塞服务器实例以完全使用机箱容量.
龙卷风/事件服务器类似于基于Java Nio的服务器.龙卷风和Eventlet之间存在一个概念上的区别.龙卷风遵循反应堆模式,其中单个进程等待IO(socket)事件,然后将它们分派给适当的处理程序.如果处理程序是非阻塞的,则可以期望获得最佳性能.通常为这些框架编写的代码由一系列回调组成,这使其比同步服务器的可读性差.JavaNIO服务器属于此类.
Eventlet执行相同的任务,但界面更简洁.可以像在同步服务器的情况下那样编写代码,而无需使用回调.遇到IO时,eventlet会调度另一个用户空间进程(不是正确的术语).
由于一些原因,Apache Webapp比这些更受欢迎
>编写同步代码相对容易
>并非所有必需的库都是异步的.
但是,对于编写处理大量连接的聊天应用程序而言,多线程服务器将无法扩展.您必须使用诸如twisted / event / Java NIO之类的异步框架.
标签:asynchronous,http,nonblocking,python,java 来源: https://codeday.me/bug/20191208/2093477.html