-
线程与进程
- 进程:
- 程序的一次执行, 它占有一片独有的内存空间
- 可以通过windows任务管理器查看进程
- 线程:
- 是进程内的一个独立执行单元
- 是程序执行的一个完整流程
- 是CPU的最小的调度单元
- 关系
- 一个进程至少有一个线程(主)
- 程序是在某个进程中的某个线程执行的
- 进程:
-
阻塞与非阻塞
- I/O (了解)
- 阻塞I/O: 调用时, 应用程序需要等待IO完成才返回结果
- 非阻塞I/O: 调用之后立即返回, 需要通过轮询得到IO的结果数据
- 非I/O
- 阻塞: 调用函数导致所在的线程暂停, 不能继续执行 —>alert()
- 非阻塞 : 其它代码(绝大部分)
- I/O (了解)
-
同步与异步
- 它们描述的是调用执行功能程序的方式
- 同步: 调用一个函数,在没有得到结果之前,该调用就不返回 (绝大部分)
- 异步: 调用一个函数会立即返回, 但此时还没有得到结果, (回调函数)
结果是通过回调函数的形式交给调用者
-
并发与并行(了解)
- 并行: 多个事件在同一时刻发生
- 并发: 指多个事件在同一时间间隔内发生
-
js线程
- js是单线程执行的(回调函数也是在主线程)
- H5提出了实现多线程的方案: Web Workers —>Worker
- 只能是主线程更新界面
- 在worker线程中, 全局对象不再是window
-
定时器问题:
- 定时器并不真正完全定时
- 如果在主线程执行了一个长时间的操作, 可能导致延时才处理
- 区别setTimeout与setInterval
-
事件处理机制(图)
- 所有代码分类
- 初始化执行代码: 包含绑定dom事件监听, 设置定时器, 发送ajax请求的代码
- 回调执行代码: 处理回调逻辑
- js引擎执行代码的基本流程: 初始化代码===>回调代码
- 模型的2个重要组成部分:
- 事件管理模块
- 回调队列
- 模型的运转流程
- 执行初始化代码, 将事件回调函数交给对应模块管理
- 当事件发生时, 管理模块会将回调函数及其数据添加到回调列队中
- 只有当初始化代码执行完后(可能要一定时间), 才会遍历读取回调队列中的回调函数执行
- 所有代码分类
-
H5 Web Workers
- 可以让js在分线程执行
- Worker
var worker = new Worker('worker.js'); worker.onMessage = function(event){event.data} : 用来接收另一个线程发送过来的数据的回调 worker.postMessage(data1) : 向另一个线程发送数据
- 不足:
- worker内代码不能操作DOM更新UI
- 不能跨域加载JS
- 不是每个浏览器都支持这个新特性
07-18
825
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)