node.js异步处理的三大特点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41033913/article/details/85264055

node.js异步处理的三大特点是:

  • 单线程(thread)
  • 非阻塞I/O (Non-blocking I/O)
  • 事件驱动(event-driven)

单线程

首先得进行说明的就是,在Java、PHP或者.net等服务器端语言中(多线程),当网页有新的用户进行访问的时候,需要进行创建一个新的线程。而每个线程大约需要花费2M的内存,那么一个8G的内存的服务器只能连接大约4000个用户,如果需要支持更多用户进行访问就得增加服务器的数量,但是这个花费是相当大的。
但是node.js不会去创建一个新的线程,他只有一个线程(单线程),但是需要支持更多的用户行进访问,就得提到node.js的其他的特点即非阻塞I/O和事件驱动。
单线程的好处就是,一个8G的内存服务器可以处理超过4W的用户连接,坏处就是如果某一个用户把这个线程搞崩溃了,其他用户就不能进行访问啦。

单线程通俗来说就是一个餐馆里面只有一个服务员,这个服务员需要服务整个餐馆的顾客,如果这个服务员生病或者什么了,那么餐馆就不能运行了!
多线程
单线程

非阻塞I/O

首先得知道 I/O 包含哪些

  • 缓冲区操作
  • 内核空间与用户空间
  • 虚拟内存
  • 分页技术
  • 面向文件的IO和流IO
  • 多工IO(就绪性选择——IO多路复用)

因为用户在访问的时候是需要进行操作的,例如需要登入、上传文件等需要消耗时间或者需要消耗时间去查找的操作,有因为node.js只有一个线程,不可能等着这位用户操作完再去服务下一位顾客,这个时候就会把这个用户压入事件栈,等操作完成后再来处理,而等待的时间就会去处理其他用户发来的请求。
在阻塞模式下,一个线程只能完成一个任务,如果想提高效率,就得需要多个线程;而在非阻塞模式下,一个线程永远在工作,其效率是100%;

非阻塞I/O通俗来说就是,这家餐馆因为只有一个服务员,先A后B顾客先来了,所以在服务A顾客的时候,蹭着A顾客点菜的时间,去服务B顾客。

事件驱动(事件机制、事件环)

node.js一个时刻只能处理一个回调函数,但是在处理回调函数的同时可以处理不是回调里面的内容,而回调函数处理完之后,重新去执行回调函数里面的内容的这种机制叫做“事件环”机制
事件环机制

事件驱动通俗来说就是,这位服务员在服务的过程中,那位选好菜单的A顾客跟服务员说,我已经选好菜啦!可以来继续服务了,这个时候服务员会停止现在服务的顾客,转而去服务A。

这三个特点是一个统一的整体,离开谁都不行!这样的机制就形成了node.js的异步处理的特点。

猜你喜欢

转载自blog.csdn.net/qq_41033913/article/details/85264055
今日推荐