nodejs神奇独特之处,在于其内部的事件处理机制。
第一、它是“单线程”的。也就是说所有用户发送请求,同时只能处理一个请求,但是,从宏观的角度说,它是一个线程同时处理多个数据(下文会说)。
单线程也有其弊端,就是若一个用户把线程搞崩溃了,那么其余的所有用户都无法运作。
第二、它是“非阻塞I/O”。什么是非阻塞呢?阻塞指一个线程里的用户发出了I/O请求(向数据库发送请求),该线程后的其余用户必须要等第一个用户的事件处理完毕后,
才能让下一个用户进来处理,这就造成了单个线程的阻塞。而nodejs的非阻塞就是一个用户发出请求,简单了解事件后就放入回调函数中,拉出下一个用户事件继续
了解,如果发现这个事件有I/O请求,则把它“放到一边”,继续对下个用户进行处理(下个用户还有I/O请求,继续放一边,处理下一个..)。
第三、就是“事件驱动”。“放到一边”就是通过事件驱动把这个事件放入原本的事件栈中,再次进行循环执行,组成一个事件环。所以虽然是或nodejs是一个单线程的服务,
但是却可以“同时”处理多个用户事件,将CPU的利用率完美的充分利用。
并且nodejs的源代码中大部分都写的是事件调用和回调函数,所以它非常适合用在需要事件调度的栏目类型中(比如:聊天软件,评论板块),同样它的缺点就是,对于处
理数据计算类型的不适用,安全性也不高,是不会有公司将其用在银行业务,证券公司的。nodejs相对于Apache、PHP、JSP根本不能相比,它只是一个专注高性能的geek
工具。
时间: 2024-10-14 16:51:28