ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

非阻塞http服务器,java nio,python tornado eventlet

2019-12-08 18:55:58  阅读:303  来源: 互联网

标签:asynchronous http nonblocking python java


你好
我试图了解基于龙卷风/ 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有