浏览器与Node的事件循环(Event Loop)有何区别?
前言 本文我们将会介绍 JS 实现异步的原理,并且了解了在浏览器和 Node 中 Event Loop 其实是不相同的。 一、线程与进程 1. 概念 我们经常说 JS 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程? 官方的说法是: 进程是 CPU 资源分配的最小单位;线程是 CPU 调度的最小单位 。这两句话并不好理解,我们先来看张图: 进程好比图中的工厂,有单独的专属自己的工厂资源。 线程好比图中的工人,多个工人在一个工厂中协作工作,工厂与工人是 1:n 的关系。也就是说 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线 ; 工厂的空间是工人们共享的,这象征 一个进程的内存空间是共享的,每个线程都可用这些共享内存 。 多个工厂之间独立存在。 2. 多进程与多线程 多进程:在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如你可以听歌的同时,打开编辑器敲代码,编辑器和听歌软件的进程之间丝毫不会相互干扰。 多线程:程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。 以 Chrome 浏览器中为例,当你打开一个 Tab 页时,其实就是创建了一个进程,一个进程中可以有多个线程(下文会详细介绍)