CCw*_*CCw 26 twisted nonblocking eventmachine node.js
我不明白这些框架解决了什么问题.它们是Apache HTTPD,Tomcat,Mongrel等HTTP服务器的替代品吗?或者他们更多?为什么我可以使用它们......一些现实世界的例子?我已经看到了无数的聊天室和广播服务的例子,但是看不出这有什么不同,例如,设置一个Java程序来打开套接字并为每个请求分配一个线程.
我想我理解非阻塞I/O,但我不明白它与多线程Web服务器的区别.对于Node.js,我读到它只有一个线程,并且这可能比处理多个线程更有效,但这是这些框架和传统Web服务器之间的唯一区别吗?
Gly*_*yph 19
如果要编写执行网络连接的代码,可以使用其中一个框架.
例如,如果您要编写一个大型多人视频游戏,"设置Java程序......为每个请求分派一个线程"可能不是一个选项; 玩弄许多线程非常复杂,并且表现也很糟糕.更不用说"只产生一堆线程"这一事实缺少了Twisted等一系列管理工具.人.有,比如twistd,处理日志记录,守护进程,启动和关闭等等.
或者,如果您想编写构建自动化系统,则异步调用和控制子进程的能力将非常有用.如果异步生成进程,则可以轻松地终止该进程并优雅地处理其退出.如果你通过启动一个线程并在该线程中阻塞来生成它,则无法轻易地阻止它,因为停止一个线程本质上是不安全的.
EventMachine和Twisted也可用于编写客户端程序; 也许你正在编写一个非基于Web的GUI应用程序,并且你想在客户端和服务器上使用相同的协议实现.
由于您可以在许多不同的上下文中使用异步框架,因此您可能希望在Web应用程序中使用它,因为您有现有的库代码,使用您想要使用的异步框架为其他应用程序编写.或者您可能希望能够在某些假设的未来非Web应用程序中重用您的Web应用程序代码.在这种情况下,它与使用Apache或Tomcat或其他任何功能没有多大区别,它只是为您提供了一种更通用,可重用的方式来组织您的程序.
小智 6
事实上,基于事件的框架适用于你拥有大量io和较少cpu操作的情况,但它定义了大多数网页,因为它们等待数据库.其他示例是像youtube一样的聊天或视频 - 一个堆栈允许同时为更多客户端提供服务.基于事件的服务器能够处理数十或数百个连接的客户端,其中这样的线程数会杀死机器.当你真正做一些处理时,它们的效率会降低.
每个连接没有堆栈。每个处理器核心只有一个堆栈。它实际上一次不能做不止一件事——为什么不等到有事情忙的时候再切换任务,而不是随意来回拉动呢?
| 归档时间: | 
 | 
| 查看次数: | 4370 次 | 
| 最近记录: |