简介:准备知识1. 进程(process)进程是系统资源分配一个独立单位,一个程序至少有一个进程。比方说:一个工厂代表一个 CPU, 一个车间就是一个进程,任一时刻,只能有一个进程在运行,其他进程处于非运行状态。2. 线程(T ...
准备知识1. 进程(process)进程是系统资源分配一个独立单位,一个程序至少有一个进程。比方说:一个工厂代表一个 CPU, 一个车间就是一个进程,任一时刻,只能有一个进程在运行,其他进程处于非运行状态。2. 线程(Thread)线程是CPU调度和分派的基本单位,一个线程只能属于一个进程,一个进程可以有多个线程且至少有一个。比方说一个车间的工人,可以有多个工人一起工作。生活中常常能看到,某某电脑 CPU 的 4 核 4 线程,其意思是指,这款 CPU 同一时间最多只能运行 4 个线程,所以有些线程会处于工作状态,有的线程会处于中断,堵塞,睡眠状态。经常看到有很多任务同时在进行,一边工作,一边听歌,还一边下载电影。那是因为这些线程在以闪电般的速度不断的切换主要的几个线程,所以,人的体验上感觉是很多很多任务在同时进行。3. 栈(stack)栈是一种数据结构,具有后进先出的特点,最开始进入栈结构的数据反而最后才能出来。var globalName = "window";var foo1 = function() { console.log("foo1");}var foo2 = function() { console.log("foo2"); foo1();}foo2(); 一个 console.log("script start!");function foo1() { console.log("foo1");}foo1();setTimeout(function () { console.log("setTimeout!");}, 1000);function foo2() { console.log("foo2");}foo2();console.log("script end!");打印:// script start!// foo1// foo2// script end!// setTimeout!那我们尝试把 setTimeout 的延迟时间改为 0,想要立即执行,看会不会立即执行: console.log("script start!");function foo1() { console.log("foo1");}foo1();setTimeout(function () { console.log("setTimeout!");}, 0);function foo2() { console.log("foo2");}foo2();console.log("script end!");打印:// script start!// foo1// foo2// script end!// setTimeout!可以看出 setTimeout 属于异步事件,总是会在主线程的任务执行完后才开始执行。顺便说一下事件循环几个原则:
console.log(1);setTimeout(function() { console.log(2); new Promise(resolve => { console.log(3); resolve(4); console.log(5); }).then(data => { console.log(data); });}, 0);new Promise(resolve => { console.log(6); resolve(7); console.log(8);}).then(data => { console.log(data);});setTimeout(function() { console.log(9);}, 0);console.log(10);output: 第一次循环:// 1// 6// 8// 10// 7第二次循环:// 2// 3// 5// 4第三次循环// 9我们一起来分析以上代码:
|