为什么要异步I/O
1.用户体验2.资源分配异步I/O实现现状
1.异步I/O与非阻塞I/O2.理想型非阻塞异步I/O3.现实的异步I/Onode的异步I/O
1.事件循环2.观察者3.请求对象4.执行回调5.事件循环分为几个阶段6.process.nextTick7.node中的宏任务和微任务非I/O的异步API
1.setTimeout setInterval2.process.nextTick3.setImmediate事件驱动与高性能服务器
下面为几种经典的服务器模型,这里对比下它们的优缺点。
同步式。对于同步式的服务,一次只能处理一个请求,并且其余请求都处于等待状态。每进程/每请求。为每个请求启动一个进程,这样可以处理多个请求,但是它不具备扩展性,因为系统资源只有那么多。每线程/每请求。为每个请求启动一个线程来处理。尽管线程比进程要轻量,但是由于每个线程都占用一定内存,当大并发请求到来时,内存将会很快用光,导致服务器缓慢。每线程/每请求的扩展性比每进程/每请求的方式要好,但对于大型站点而言依然不够。每线程/每请求的方式目前还被Apache.所采用。Node通过事件驱动的方式处理请求,无须为每一个请求创建额外的对应线程,可以省掉创建线程和销毁线程的开销,同时操作系统在调度任务时因为线程较少,上下文切换的代价很低。这使得服务器能够有条不紊地处理请求,即使在大量连接的情况下,也不受线程上下文切换开销的影响,这是Node高性能的一个原因。