Node与Java后台对比

高并发场景下的对比:

nodejs具有单线程、非阻塞IO、事件循环/驱动的特点,所以在高并发场景下,线程占用cup处理资源,cup不用等待IO的处理过程,而是不停的的发起异步请求,在异步处理结束后继续下一步异步任务。所以不会出现线程阻塞。如图1所示。

优势:
cpu利用率较高,因为cpu不用等待IO,而时一直在发起异步请求。
不足:
单个线程崩溃后,所以任务都无法进行,而多线程并发场景下,某个线程崩溃,不影响其他线程任务

类似Java的后台则通过多线程处理高并发任务,某个线程在进行IO时,cpu总是会等待IO处理结束后继续下一个任务,当然在某个线程处理时,其他线程只能等待这个线程处理结束,这就是线程阻塞。如图1所示。

图1:
图1
所以,同意内存大小的服务器,异步事件的高并发连接要多于多线程并发连接。

Node事件驱动和事件循环

图2:
在这里插入图片描述
如图2所示:

  1. Node只有一个主线程执行代码,形成一个执行栈。
  2. 在主线程中还维护一个事件队列,将所有网络请求异步IO放在事件队列中。
  3. 直到主线程的代码执行完成以后,会通过事件循环机制来检查事件队列中是否有待处理任务。
  4. 事件循环机制会将事件队列中的任务分为两种情况:非IO任务、IO任务。
  5. 对于非IO任务主线程会亲自执行,然后通过回调函数返回给上层调用;对于IO任务,Node会从底层的线程池中分配一个线程来执行这个IO任务事件,执行完成后将事件的回调函数放在任务队列尾部,等待事件循环机制下,主线程的亲自执行后返回给上层调用(后半部分类似于非IO任务事件的执行)。

适用场景:

Node更加适用于IO密集型场景,如sql请求、文件读取、HTTP请求等。
但对于cpu计算密集型场景,由于是单线程的处理,所以相对于多线程计算会显得弱势。

所以Node常用于像聊天室等简单逻辑的业务应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值