异步和同步、阻塞和非阻塞
主要分为以下几类组合:
同步阻塞
异步阻塞
同步非阻塞
异步非阻塞
假设调用方为小明,被调用方为小红 图1:小明喜欢小红,小明于是乎决定给小红打电话表白,小红接电话,如果此时小红把电话晾在那,小明则有两种状态,一种是阻塞、一种是非阻塞,阻塞就是小红晾电话的同时,小明还在等着,叫做阻塞,非阻塞就是小红晾电话的同时,小明可以去干别的事情,叫做非阻塞,小红接电话后说,我要想一想再给你答复,此时如果没挂掉电话,那么是在同步,如果挂掉电话一会再告诉小明,那么就会是异步。
图2:当小红接电话后,说想一想,一会再告诉你结果,然后把电话挂了,此时属于异步,然后小明如果还在痴情地等待电话回复(即2.1),那么称为阻塞,如果小明此时并不是干等这个答复,而是打电话向另外一个妹子表白(即2.2),那么称为非阻塞,结合起来就是异步堵塞或异步非堵塞。
图3:当小红接电话后,说想一想,一会再告诉你结果,然后电话也不挂,一直通话,此时属于同步,但是小明此时偷偷向另外一个妹子打电话表白,这个行为属于非堵塞,结合起来就是同步非阻塞。
队列和栈
队列的特点: 先进先出,如数组,依次往后添加;
栈的特点: 先进后出
首先我们往栈里面分别放1、2、3, 然后取出时,是按照3、2、1取出;
function a() {
function b() {
function c() {
}
c()
}
b()
}
a()
// 这个代码中,我们是依次执行了a函数、b函数、c函数
// 但是在销毁的时候,是先从c函数销毁,然后再销毁b函数
// 最后销毁a函数,如果是先销毁a函数的话,那么b就会失去了其执行栈
// 也就是执行上下文,所以在执行栈中,是先进后出。