网站首页 > 技术文章 正文
你可能已经听说Node.js是“基于Chrome的V8 JavaScript引擎的异步JavaScript运行的”,并且它“使用事件驱动的非阻塞I / O模型,使其轻量级和高效”。但对某些人来说,这不是最好的解释,或许太过于概念化。
首先要了解什么是Node.js?其次要知道Node.js究竟“异步”与“同步”有什么不同意思?还要讨论,“事件驱动”和“非阻塞”的含义是什么?
什么是Node.js
Node只是一个环境或运行时,可以在浏览器之外运行普通的JavaScript(略有不同)。
我们可以使用它来构建桌面应用程序(使用像Electron这样的框架),编写Web或app服务器等等。
阻塞/非阻塞和同步/异步
假设我们正在进行数据库调用以检索有关用户的属性,该调用需要时间,如果请求是“阻塞”,那么这意味着它将阻止我们的程序执行,直到调用完成。在这种情况下,我们发出了“同步”请求,它最终阻止了线程。
因此,同步操作会阻塞进程或线程,直到该操作完成,使线程处于“等待状态”。一个异步操作,在另一方面,是非阻塞的,它允许执行线程继续进行,无论操作完成所花费的时间或完成操作的结果如何,并且线程的任何部分都不会在任何时候进入等待状态。
让我们看一下阻塞线程的同步调用的另一个例子。假设我们正在构建一个应用程序,用于比较两个Weather API的结果,以找出它们的差异化。我们以阻塞的方式调用Weather API One并等待结果。得到结果后,我们调用Weather API Two并等待其结果。
请允许我个人指出一个问题:重要的是要认识到并非所有同步调用都必然是阻塞的。
如果同步操作可以设置完成而不阻塞线程或导致等待状态,则它是非阻塞的。大多数情况下,同步调用将被阻塞,完成所需的时间取决于多种因素,例如API服务器的速度,最终用户的互联网连接下载速度等。
对于上图,我们不得不等待一段时间才能从API One中检索第一批结果。此后,我们不得不等待同样的时间来获得API Two的回复。
在非阻塞调用的情况下,我们会有这样的事情:
你可以清楚地看到我们完成执行的速度有多快,而不是等待API One然后等待API Two,我们可以等待它们同时完成并将调用速度提高近50%。
因此请注意,一旦我们调用了API One并开始等待它的响应,我们也调用了API Two并开始等待它的同时响应它。
?我们相信通过实验测试之后,相信很多人会更加了解阻塞,非阻塞,和同步,异步的使用。
?
猜你喜欢
- 2024-10-01 太详细了!Java语言异步非阻塞模式(原理篇)
- 2024-10-01 老张烧开水的故事-带你了解同步异步与阻塞非阻塞
- 2024-10-01 一文读懂并发与并行,同步与异步阻塞
- 2024-10-01 IO模型 阻塞 非阻塞 同步 异步概念对比区分
- 2024-10-01 精通Redis!epoll?IO的同/异步、阻塞/非阻塞?都懂了吗?
- 2024-10-01 深入理解非阻塞同步IO和非阻塞异步IO
- 2024-10-01 产品经理需要了解的那些技术2:同步、异步、阻塞、同步服务
- 2024-10-01 数据库讲坛|有关阻塞与非阻塞、同步与异步、I/O 模型-爱可生
- 2024-10-01 I/O模型 - 同步/异步/阻塞/非阻塞
- 2024-10-01 一个例子说清楚阻塞与非阻塞,同步与非同步
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)