Nodejs异步和事件

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

 

非阻塞:



 

其输出的结果是

end,

hello world

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

 

 

 

阻塞



 

其结果是:

hello world

end.

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

 

结果分析:

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

 

自定义事件:

 例一:



 

  例二:



 运行结果:



 依次执行了。

 



 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值