NodeJS开发指南:读书笔记随谈之一
这本书是市面上讲nodejs的一本不可多得的入门书,当初想学 nodejs的时候,找了半天,终于找到了这本好书,随后一发不可收拾,花了一两天的功夫就看玩了,感觉作者系统功力深厚,以下只是偶的一些摘要,权当心得体会。
书里说nodejs的核心特性是异步IO,事件驱动,任何IO操作都是由事件来驱动的。
说到异步IO又不得不来看看操作系统的线程与阻塞。
什么是阻塞呢,线程在执行中遇到磁盘读写或者数据库通讯,网络通讯这种耗时比较多的时候,操作系统将会剥夺此线程的CPU资源,并暂停此线程,转而去执行别的线程,此线程调度方式称为阻塞。当 I/O操作完成之后,操作系统又恢复此线程,让其继续执行,这种I/O模式通常称为同步I/O或者阻塞式I/O。
异步式IO或者非阻塞式I/O则针对所有操作采取不阻塞的方式,当线程遇到IO操作的时候,不会以阻塞的方式等待IO操作完成或者数据的返回,而是将IO操作发送给操作系统,然后接着执行下一个操作,当操作系统执行完IO操作之后,将是事件的方式通知执行IO的线程,线程会在特定的时候执行这个事件。这一切的前提条件就是,系统需要一个事件循环,以不断的去查询有没有未处理的事件,然后给预处理。
阻塞方式下,一个线程只能处理一个任务,要想提高系统的吞吐量,必须使用多线程 ;而非阻塞情况下,一个线程永远在执行计算,CPU使用率几乎100%,IO以事件的方式通知。在阻塞模式下,多线程能够提高系统吞吐量,因为一个线程在阻塞的时候,还有另一个线程在工作,多线程 不会让CPU资源在线程阻塞的时候浪费。而在非阻塞模式下,线程不会被IO阻塞,CPU资源也不会浪费。多线程只是在多核的时候利用更多的核,而nodejs的单线程也能带来这个好处。 所以这就是nodejs采取单线程,非阻塞的事件编程模式。
以下是书中的两幅图,
再弄一个同步式IO与异步式IO的特点比较,依然用书中的图
最后以异步读取一个本地的文件来结束本文,:)
//demo.js //加载文件模块 var fs=require( 'fs' ); fs.readFile( 'a.txt' , 'utf-8' , function (err,data){ if (err){ console.log(err) } else { console.log(data); } }); console.log( 'there is firstprint' ); |
以上代码,可以在命令行中,切换到demo.js的目录中,输入node demo.js回车即可运行看到结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?