先说结论:
- 总结:
- 异步:一个线程(不浪费其他线程的资源,多线程会因为web中的IO操作而导致时间浪费)通过某种方式(如:
并发 +回调函数)来实现多个"时间线"。特点:1是在一个"时间线"中的某时刻,另一个"时间线"的结果不一定会返回。2是简单高效(小而美) - 多线程:多个线程(多个线程同时工作,因为计算密集的应用,如视频处理,不像web中IO操作而使某些线程停滞)通过
并发 的方式来实现多个线程分工合作,同时来完成计算,从而提高CPU的利用率与效率。特点是比较复杂,多线程会有很多要考虑的因素,如线程安全(总之实现多线程代码比较复杂)。
- 并发
- 一个单核CPU,通过分配时间片的方式,执行多个任务(多个时间线上快速轮流工作)。
- 并行
- 多核CPU,不同核执行不同任务,从而实现多个任务(多个人从不同位置开始做一件事)
- 同步
- 只有一条时间线(代码一行一行执行)
- 异步
- 有多个时间线(可以开辟新的时间线,时间线相互独立,所以会出现A时间线需要B时间线的结果,但是B还没有得到结果的情况。通过AJAX或fetch来实现,通过Promise|Axios|aysnc/await来优化结构)
- Javascript的异步:
- 通过回调的方式,在一个主线程中,用并发的形式实现异步
- 异步和多线程,都是实现多个时间线的方法
- 异步:适合需要较多时间线如web应用(需要大量IO操作,特点是请求与返回需要时间)
- 如果使用多线程,每个线程都会在异步返回结果之前浪费很多时间。而且线程内存开销,线程切换开销,都会浪费很多资源。
- 多线程:适合计算密集的应用(如,视频渲染,不可能一帧一帧渲染,而是多个核心分工一起合作)
- 因为:
- 每个线程不会因为因为IO浪费时间
- 可以让每块CPU发挥作用
|