欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nodejs异步和事件

程序员文章站 2022-05-18 13:12:52
...

node.js是单线程。

好处就是

1)简单

2)高性能,避免了频繁的线程切换开销

3)占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低

3)线程安全,没有加锁、解锁、死锁这些问题

 

Node.js是单线程的,它通过事件轮询(event loop)来实现并行操作。可以在不新增额外线程的情况下,依然可以对任务进行并行处理。

Node.js 借助事件驱动 非阻塞I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用。V8引擎执行Javascript的速度非常快,性能非常好。

 

非阻塞I/O和阻塞I/O分析:

   我们可以将同步I/O称为阻塞I/O,非阻塞I/O称为异步I/O。同步I/O当请求发出之后,应用程序就会阻塞,直到请求满足为止;非阻塞I/O允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。

在使用同步I/O的网络应用中,如果要同时处理多个客户端请求,或是在客户端要同时和多个服务器进行通就必须使用多线程来处理。也就是说,将每一个客户端请求分配给一个线程来单独处理。

非阻塞I/O的程序一般是单线程的,因此,服务端接收的客户端请求数并不随着工作线程数的增加而增加。所以使用非阻塞I/O模式就不会受到操作系统对线程总数的限制,也不会 占用大量的服务器资源。

 

非阻塞I/O和同步I/O最明显的不同就是同步I/O所有可能被阻塞的地址在非阻塞I/O中都不会被阻塞。如在读取数据时,如果数据暂时无法被读取。那么 在非阻塞I/O中会立刻返回,以便程序可以执行其他的代码,然后系统会不断侦测这个未完成的读取操作,直到可以继续读数据时再来完成这个操作。

 

如:file.txt的内容是:hello world

 

非阻塞:


Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
 

其输出的结果是

end,

hello world

程序不会等待文件读取,而是继续执行输出end,等到文件读取完成后就会回调响应函数,输出hello world

 

 

 

阻塞


Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
 

其结果是:

hello world

end.

程序会等待文本读取完毕输出读取结果后再往下面执行,输出end。

 

结果分析:

非阻塞I/O发送请求后立即返回执行后面的语句,执行完以后进入时间循环监听,当fs接受到I/O请求完成事件时,事件循环会主动调用 回调函数执行后续工作,同步则是阻塞等待完成后,再继续执行。

 

自定义事件:

 例一:


Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
 

  例二:


Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
 运行结果:


Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
 依次执行了。

 


Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
 

 

 

  • Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
  • 大小: 54.7 KB
  • Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
  • 大小: 38.5 KB
  • Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
  • 大小: 75.5 KB
  • Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
  • 大小: 104.9 KB
  • Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
  • 大小: 12.3 KB
  • Nodejs异步和事件
            
    
    博客分类: Nodejs nodejs阻塞非阻塞I/O 
  • 大小: 135 KB