javascript大佬进~ (已解决)
"当线程中没有执行任何同步代码的前提下才会执行异步代码" 这句话该怎么理解?
是指在所有同步代码执行完之前不会执行异步代码?
在q群得大佬解答(以下是解答内容,学习javascript的小伙伴可以看下~)
这是一种反证的思想,
其实你理解的也不错,
我在补充一点自己理解,
如果想了解“当线程中没有执行任何同步代码的前提下才会执行异步代码”这句话,
首先必须要知道什么是进程和线程,
进程可以理解为是程序的一次执行,
而线程就是存在进程空间里的一个执行路径(多路径),
线程的资源都是共享的,
这里就存在优先级别、抢占式、多任务处理等等.(可以读读"操作系统的设计与实现",介绍的很详细),
简单的说了一下线程和进程 ,
接下来聊聊同步和异步,
同步就是指在发生调用时,
再没有得到结果之前,
该调用是不会返回结果的,
也就是必须得做完本次作业,
才会进入下一次作业;
而异步是对立的,
在没有得到返回结果之前,
不需要一直等下去,
而可以继续执行下面的其他操作,
说完同步和异步,
我们浅谈一下js的引擎,
简单来说JS是一个单线程引擎,
是基于事件驱动的。JS引擎会一直等待任务队列中任务的到来,
然后处理,
处理完成之后,
执行下一个JS队列中的任务,
以此类推;举个简单的例子,
就是while循环,
while循环就是一个同步线程,
它会根据他的循环条件依次把循环体添加入任务队列中,
然后依次执行该队列中的操作。这个过程是井然有序的,
有始有终。而另一个例子就是setTimeOut,
这是一个异步线程,
当我的线程(一条线程)从读取setTimeOut的时间时,
可以在不等time事件执行完,
走下一个队列中的任务,
假如此时setTimeOut的第二次time来了( 它是不考虑线程的顺序,异步),
势必需要我的JS引擎去在队列中执行它。但是如果我下一个队列中的任务(第一个任务是setTimeOut)是一个同步线程(while死循环),
那么此时线程会一直去运行这个死循环的而导致JS引擎没有任何的空闲时间,
所以他的下一个setTimeOut就永远无法进行.这也就说明线程一直在执行同步代码导致没有空闲的时间去处理他的异步请求。以上就是个人的想法,
希望对你有帮助。 晚安!
玩过Node.JS的应该都知道这一点。