《深入浅出nodejs》读书笔记(2)

概述

本来是想着学学node.js试试的,后来发现node.js才是真正的js啊,它里面用到了很多我们平时没用过的js特性,而且还非常优雅,比如它里面的异步编程思想,总之,《深入浅出node.js》绝对值得一看。

下面是我的读书笔记。

异步IO

1.异步IO的优势:a.从用户体验上来说,异步IO在这个资源的获取时并不会阻塞下一个资源,因此我们可以享受并发的体验;b.从资源分配上来说,单线程同步编程模型会因阻塞IO导致硬件资源得不到更优的使用,多线程编程模型会因为死锁、状态同步等问题让开发人员头疼,但是异步IO利用单线程,远离了死锁和状态同步等问题,而且利用子进程也弥补了无法利用多核CPU的缺点。

2.阻塞IO会造成CPU等待IO,浪费等待时间;非阻塞性IO返回后,CPU的时间片可以用来处理其他事务,但是应用程序需要重复调用IO操作来确认是否完成。这种判断操作叫做轮询。

3.现存的轮询技术主要有:

  1. read。重复调用来检查IO的状态。
  2. select。通过文件描述符的事件状态来进行判断。
  3. poll。采用链表的方式避免数组长度的限制。
  4. epoll。进入轮询的时候如果没有检查到IO事件,将会进行休眠。
  5. kqueue。仅在FreeBSD系统下存在。

4.理想的完美异步IO:应用程序发起非阻塞调用,无须通过遍历或者事件唤醒等方式轮询,可以直接处理下一个任务,只需在IO完成后通过信号或者回调将数据传递给应用程序。

5.现实的异步IO:利用多线程解决。让一个线程进行计算处理,通过线程之间的通信将IO得到的数据进行传递,这就轻松实现了异步IO。

6.由于windows平台和lunix等平台的差异,Node提供了libuv作为抽象封装层,使得所有平台兼容性的判断都由这一层来完成。

7.Node的异步IO:完成整个异步IO环节的有事件循环、观察者和请求对象等。

  1. 事件循环:每个循环称为Tick,每个Tick的过程查看是否有事件待处理,有就处理,没有就进入下个Tick。
  2. 观察者:每个事件循环中有一个或多个观察者,判断是否有事件处理的过程就是向这些观察者询问是否有要处理的事件。
  3. 请求对象:调用过程中,会创建一个FSReqWrap请求对象,来挂载js层传入的参数,并提供调用方法。
  4. 线程池:组装好请求对象后,会将它送入IO线程池等待执行。执行完毕之后,会通知当前对象操作已经完成,然后执行回调,归还线程池。

8.非IO的异步API

  1. setTimeout和setInterval。
  2. process.nextTick。
  3. setImmediate。

9.服务器模型
1.同步式。一次只能处理一个请求,并且其余请求都处于等待状态。
2.每进程/每请求。为每个请求启动一个进程。(不具备扩展能力,因为系统资源只有那么多)
3.每线程/每请求。为每个请求启动一个线程。(由于每个线程都占用一定内存,并发过多时内存容易被用光)
4.事件驱动。无须为每一个请求创建额外的对应线程,可以省掉创建线程和销毁线程的开销,上下文切换的代价也很低。

转载于:https://www.cnblogs.com/yangzhou33/p/9966920.html

### 回答1: Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,通过它可以使用JavaScript开发服务器端应用程序。Node.js的设计初衷是解决传统的后端开发中瓶颈问题,如高并发、I/O密集以及复杂的数据处理等。 Node.js拥有非阻塞式I/O与事件驱动的特点,这使得在处理大量并发连接时表现出色。与传统的多线程服务器相比,Node.js的单线程事件循环机制能够更高效地利用CPU和内存资源,并且能够处理更多的并发请求。 通过使用Node.js,开发者可以使用JavaScript语言进行全栈式开发,避免了前后端技术栈的差异性,提高了开发效率。Node.js的模块化机制使得使用第三方模块更加方便和灵活,有助于代码的复用和维护。 在图灵中,我们可以通过学习Node.js来掌握以下几个核心概念: 1. 事件驱动与异步编程:Node.js利用事件循环机制实现异步非阻塞I/O,通过回调函数实现事件的处理。理解事件驱动的编程思维,能够使开发者更好地处理高并发情况下的请求。 2. HTTP服务器与路由:Node.js提供了HTTP模块,可以搭建自己的Web服务器,并实现路由功能。学习如何创建HTTP服务器和处理请求,能够让我们更好地理解Web开发的原理。 3. NPM与模块化开发:NPM是Node.js的包管理工具,可以方便地安装和管理第三方模块。学习NPM的使用,了解模块化开发的概念和实践,能够更好地管理项目的依赖和提高代码复用性。 4. 文件系统与流操作:Node.js可以轻松地进行文件的读写和操作,通过流的方式进行数据的传输和处理,提高了大数据量的处理效率。 5. Express框架与数据库操作:Express是Node.js的Web应用程序框架,可以简化Web开发的过程。同时,Node.js也支持各种数据库的操作,学习如何使用Express框架和操作数据库,能够更好地构建实际的应用程序。 通过深入浅出地学习Node.js,我们可以全面掌握JavaScript在服务器端的应用,提升自己的全栈开发能力,能够更好地应对日益复杂的网络开发需求。 ### 回答2: 深入浅出node.js图灵是指以易于理解和掌握的方式介绍node.js这个开发平台。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它主要用于服务器端编程,可以构建高性能的网络应用。 深入浅出的意思是通过简单明了的解释和示例来讲解node.js的关键概念和用法,使初学者能够迅速上手。在深入方面,不仅仅是讲解语法和API,还涉及到node.js的设计原理和性能优化等方面的知识。在浅出方面,避免过多的技术术语和复杂的概念,注重引导读者理解核心的思想和模式。 在node.js图灵的学习中,可能会包含以下内容: 1. Node.js的安装和配置:介绍如何下载、安装和配置Node.js的运行环境。 2. JavaScript快速回顾:回顾JavaScript的基本语法和用法,为后续的Node.js开发做准备。 3. 模块和包管理:讲解Node.js的模块系统和npm包管理器,了解如何使用、创建和发布模块和包。 4. 异步编程:深入理解Node.js的事件驱动和非阻塞I/O模型,学习如何编写异步代码以提高系统的性能和可伸缩性。 5. HTTP和网络编程:探索Node.js在网络编程中的应用,如创建HTTP服务器、发送和接收HTTP请求等。 6. 数据库和存储:介绍如何使用Node.js操作数据库,如MySQL、MongoDB等,以及文件系统的读写操作。 7. Web框架和中间件:学习常用的Node.js Web框架,如Express.js,以及如何使用中间件来处理请求和响应。 8. 调试和优化:掌握Node.js的调试技巧和性能优化策略,以提高应用的稳定性和效率。 通过深入浅出node.js图灵的学习,可以快速掌握Node.js的基本概念和用法,并能够使用Node.js构建高性能的网络应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值