怎样理解阻塞非阻塞与同步异步的区别? 发现很多人对这两个概念往往混为一谈 计算机英语小课堂开课啦! 首先我们来看看阻塞和异步在英文里是怎么使用的Blocking methods execute synchronously and non-blocking methods execute asynchronously. —— Node.js 官方文档《Overview of Blocking vs Non-Blocking》 搞清楚这句英文,基本就知道它们的区别了。所以我们来逐词理解。 Blocking methods … and non-blocking methods 这个 blocking methods 怎么理解?为了理解英文造词的一些规律,我来举另外一个例子:interestinginteresting 是「有趣的」的意思,比如 Your idea is interesting.它是动词 interest 「使…产生兴趣」的 ing 形式。 通过这个例子我们知道,当我们说 idea 是 interesting,相当于说 idea 有「使人感兴趣」的能力,如果某人对它感兴趣了,我们就说 He/She is interested in something。记住这个 interested。 同理, block 做动词是「堵住,使…阻塞」的意思,例句:It will block the traffic if you park your car here.如果你把车停在这,交通就会被堵住(直译) 那么文章开头那句英文里的 blocking methods 的意思就是,这些 methods 有「使…阻塞」的能力。 或者换个方法翻译,这些 methods 能够让什么东西处于阻塞状态,也就是 blocked 状态(还记得上文的 interested 吗)。 好了,现在我们了解了 block 相关的三个词:block 是使 xxx 处于 blocked 状态,及物动词blocking 是用于修饰具有「使 xxx 处于 blocked 状态」能力的东西,形容词blocked 是指处于 blocked 状态,形容词 但对应的中文就很微妙了block 阻塞,动词,这个函数会阻塞当前进程blocking 阻塞的,形容词,这个函数是阻塞函数blocked 阻塞的,形容词,当前进程是阻塞的 这就是为什么中文母语这在学习阻塞概念时容易找不着北,三个词看起来都特么一样啊,到底是谁阻塞了谁,谁又被谁阻塞了呢! 当你用英文来理解时,一切就很简单了:当某个进程处于挂起状态(在等待其他进程的结果)时,我们就说当前进程 is blocked。当某个函数的执行过程会使当前进程 blocked 时,我们就说这个函数是 blocking method。 现在,你理解了Blocking methods execute synchronously and non-blocking methods execute asynchronously. 这句话的 Blocking methods 和 non-blocking methods 是什么意思。 接下来理解这句话的剩余部分:同步和异步。 … execute synchronously … execute asynchronously synchronously 是同步地,是一个副词,用于修饰 execute 执行;asynchronously 是异步地,是一个副词,用于修饰 execute 执行; 好了,现在我们知道同步和异步表示的是执行姿势,也就是怎么执行:如果执行的最后能得到结果,就是同步地执行;如果执行得最后不能得到结果,要在之后通过其他方式拿结果,就是异步地执行; 举个例子: 可以看到,异步地执行的函数拿不到结果,这么做的优点是「快」,因为不用等文件读完就可以去执行后面的代码,但结果终究还是要拿的呀,很简单,一般用轮询或回调来拿。为了让大家专注于同步与异步地区别,我们就不讲轮询和回调了。 另外说一下,很多程序员都搞不清楚异步与回调的区别,就是因为很多文章喜欢把它们混为一谈。 总结 现在阻塞和异步我们都理解了,他们的区别是什么呢?阻塞 blocking 是指某个函数的执行会使当前进程处于 blocked 状态,这个状态一般会在拿到结果后消失。非阻塞 non-blocking 就是 blocking 的反义词了,不会试其处于 blocked 状态同步 synchronously 是指某个函数可以 synchronously 执行,这种执行姿势是指执行结束时拿到结果异步 asynchronously 是 synchronously 的反义词,指执行结束时拿不到结果,这种往往是为了快而故意为之的,后续可以通过轮询或回调的方式拿结果注意,同步执行的函数也可以通过回调拿结果,所以不要把异步和回调混为一谈 区别与联系 如果某个 blocking 函数让进程处于 blocked 状态的时间太久(比如读文件就可能遇到10G的文件,读起来那叫一个慢),我们可以把这个 blocking 函数改造成 non-blocking 函数(Node.js 的 readFile 就提供了 blocking 和 non-blocking 两个版本),改造方法就是让它异步地执行 execute asynchronously。 因为进程处于 blocked 状态其实就是为了拿到结果,而 execute asynchronously 可以先不拿结果,通过轮询或者回调的方式拿到结果。 完。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/61715.html