并行?并发?异步?
同步:synchronous: 指所有任务按出现的先后顺序依次执行 如果出现阻塞的任务,那么线程就会等待这个任务完成,接着执行下一个任务。
异步:asynchronous:不保证所有任务按出现的顺序执行
并发:concurrent:从宏观上,某个时间段里面多个程序都得到了运行,但不是说“同时运行”
并行:parallel:在多核心下,因进程和线程独立运行,且多个线程之间共享数据,程序可以同时运行。
定时器
常用的回调函数有:
- setTimeout
- setInterval
- setImmediate(Node.js)
- requestAnimationFrame
https://zhuanlan.zhihu.com/p/55129100
setTimeout
作用:延迟指定的时间来调用函数或计算表达式。
语法:setTimeout(func /**函数,必选*/,code /**表达式,可选*/ ,milliseconds /**执行需等待的毫秒数,必选*/param1, param2, .../**传递给函数的参数,可选*/)
具体用法参加《Javascript异步编程(一)》
setInterval
作用:按照指定的周期(以毫秒计)来调用函数或计算表达式。
语法:setInterVal(func /**函数,必选*/,code /**表达式,可选*/ ,milliseconds /**每次执行将延迟的毫秒数,必选*/param1, param2, .../**传递给函数的参数,可选*/)
原理
console.log('sync...',1);
setInterval(()=>{
console.log('sync...',2)
},2000);
console.log('sync...',3)
流程分析: 1. 主程序调用栈 1. 调用webAPI-setInterVal
2. 定时器线程计数2s 3. 每隔2s事件触发线程将回调放入任务队列 4. 主线程通过Event Loop遍历任务队列执行回调 console.log('sync...',2)