node_同步异步
//同步 // function fn (n) { // if (n == 0) return n // return fn(n-1) // } // console.log(1) // let result = fn(5) // console.log(2) // 运行结果1、2 // 当result没有返回结果以前,console.log(2)不能被执行 //异步 //console.log("1"); // setTimeout(()=>{ // console.log("2"); // },1000); // console.log("3"); // 运行结果是:1、3、2 //setTimeout里的函数并没有立即执行,而是延迟一段时间,符合特定的条件才开始执行,这就是异步执行操作。 // node.js中对同步,异步,阻塞与非阻塞的理解 // 我们都知道javascript是单线程的,node.js是一个基于Chrome V8 引擎的 javascript 运行时环境,注意 node.js 不是一门语言,别搞错了。 // javascript为什么是单线程的,这么做有什么好处? // 因为历史原因,js的出现主要是为了解决页面的交互和操作DOM,如果是多线程的,就会带来比较复杂的同步问题。 // 比如两个线程同时操作一个DOM,那最终页面显示上会以哪个线程操作为准,这就是个问题。而单线程就没有这种问题。 // 创建线程是需要消耗资源的,早期js是嵌在网页中被浏览器解释运行的,如果是多线程那必然会消耗比较多的资源,显然与js的定位不符。 // 还有多线程之间的上下文切换也会比较消耗时间,这也是js是单线程的原因,估计js单线程这个特征以后也不会改变。 // 单线程的好处:1、没有线程间同步问题。2、节省创建线程资源。3、节省上下文切换时间。 // 但是单线程也有问题,所有的操作都必须一个一个来,如果中间有一个操作非常耗时,那整个运行都会阻塞在那里。 // 为了解决这个问题,js引入了事件和回调函数机制,对于一个IO操作,比如一个ajax,当发出一个异步请求后,程序不会阻塞在那里等待结果的返回,而是继续执行下面的代码。 // 当请求成功获取到结果后,就会调用回调函数来处理后面的事情,这个就是异步的非阻塞。 // 当然,异步 与 非阻塞,同步 与 阻塞,这两者之间概念很容易搞混。 // 一、同步与异步关注的是消息的通知方式。 // 同步,当发起一个调用时,在没有获取结果之前,调用不会返回,直到获取结果。事一件一件做,做完一件再做下一件。 // 异步,当发起一个调用时,在没有获取结果之前,调用就返回了,调用者并不会立即得到结果,而是被调用者通知调用者。通过回调函数处理结果。 // 二、阻塞与非阻塞关注的是等待结果(返回值)时的状态 // 阻塞,在等待结果的过程中,不能干其他事,线程被挂起,直到结果返回。 // 非阻塞,在等待结果的过程中,还能干其他事,线程不会被阻塞。 // 非阻塞一定时多线程来实现的,但底层实现时c/c++实现的 // 同步阻塞方式: // 比如,你打电话问老婆今晚吃什么,老婆在电话那边一直想啊想,你在电话这边不干别的,就一直等啊等,电话始终未挂,直到她说吃火锅,电话才挂掉。 // 同步非阻塞方式: // 比如,你打电话问老婆今晚吃什么,老婆在电话那边一直想啊想,你在电话这边该干什么干什么,电话始终未挂,直到她说吃火锅,电话才挂掉。 // 异步阻塞方式: // 比如,你打电话问老婆今晚吃什么,老婆说我想想,过一会跟你打话。你在电话这边什么也没干,就一直等着这个电话。 // 异步非阻塞方式: // 比如,你打电话问老婆今晚吃什么,老婆说我想想,过一会跟你打话。你在电话这边想干什么干什么,如果有电话来了,再处理电话。 // 同步与异步是被调用方决定的,决定是马上给你答案,还是过会通知你,给你答案。 // 阻塞与非阻塞是调用方决定的,在等待结果的过程中, 是否还可以干其他事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!