深入理解Javascript单线程谈Event Loop
假如面试回答 js 的运行机制时,你可能说出这么一段话: “Javascript 的事件分同步任务和异步任务,遇到同步任务就放在执行栈中执行,而碰到异步任务就放到任务队列之中,等到执行栈执行完毕之后再去执行任务队列之中的事件。 ” 但你能说出背后的原因吗? 1. 线程与进程 进程 :是系统资源分配和调度的单元。一个运行着的程序就对应了一个进程。一个进程包括了运行中的程序和程序所使用到的内存和系统资源。 线程 :线程是进程下的执行者,一个进程至少会开启一个线程(主线程),也可以开启多个线程。 2.同步和异步 同步和异步关注的是 : 消息 ( 结果 ) 通信机制。 同步 : 发出调用 后 ,在没有得到结果前,该调用不返回。但是一旦调用返回,就得到返回值 异步 : 发出调用后,调用直接返回,没有返回结果。但结果由回调函数给出,至于什么时候给出,不知道。(这个回调函数肯定是在当前 js 执行完后才执行) 3.阻塞与非阻塞 阻塞和非阻塞关注的是 : 程序在等待调用结果时的 状态 . 阻塞调用 : 调用结果返回之前,当前线程被挂起。调用线程只有在得到结果后才会返回。 非阻塞调用 : 在不能立刻得到结果之前,该调用不会阻塞当前线程。 4. 为什么 JavaScript 是单线程? JavaScript 是 单线程 ,程序按照顺序排列,前面的必须处理好,后面的才会执行。 JavaScript