深入浅出Node.js读书笔记:Node.js为什么要异步I/O(3.1)

关于异步I/O为何在Node里如此重要,这与Node面向网络设计不无关系。在当前网络环境下,并发已是编程中的标配。具体可以从如下两那个方面说起。

3.1.1 用户体验

早期浏览器中Javascript是单线程执行,并且与UI渲染共用一个线程,这意味着Javascript执行时,UI渲染和响应都处于停滞状态。

在B/S模型中,网络限速也会给网页的实时体验造成很大麻烦。如果网页需要获取一个网络资源,通过同步的方式获取,那么Javascript就需要等待资源从服务器端获取后才能继续执行,这期间UI将停顿,不响应交互行为。如果采用异步请求,那么在下载资源的同时,Javascript和UI的执行都不会处于等待状态,可以继续响应用户交互行为。

3.1.2 资源分配

从资源分配的层面来进一步分析异步I/O的必要性。我们知道计算机发展过程中将组建进行了抽象,分为I/O设备和计算机设备。

现有业务的任务执行顺序主要有两种:
1.单线程串行依次执行。
2.多线程并行完成 。

如果创建多线程的开销小于并行执行,那么多线程的方式是首选。多线程的代价在于创建线程和执行线程上下文切换的开销比较大。另外在多线程编程中面临锁,状态同步等问题,这是多线程诟病的主要原因。

在计算机资源中,通常I/O与CPU计算机之间是可以并行进行的。但同步的编程模型导致的问题是,I/O的进行会让后续任务等待,这造成资源不被更好地利用。

操作系统会将CPU时间片分配给其余进程,以公平而有效地利用资源,基于这一点,有的服务器为了提升响应能力,会通过启动多个工作进程来为更多的用户服务。

异步I/O可以算作Node的特色,因为它是首个大规模将异步I/O应用在应用层上的平台,它力求在单线程上将资源分配得更高效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值