多线程是对cpu剩余劳动力的压榨,是一种技术,强调的是并发(想想web server 需要处理大量并发请求的场景)。--并发与并行的区别?
异步强调的是非阻塞,是一种编程模式(pattern),主要解决了UI响应被阻塞的问题,可借助线程技术或者硬件本身的计算能力解决。
并行虽然同样也是对cpu剩余劳动力的压榨,且基于多线程技术,但它强调的是高效完成计算任务,而不是并发数量。
问题比较抽象,举个例子:
背景:作为一个北漂,准备结束北漂生涯,谋划如何搬家。其余家当都变买了,就剩下有一辆小轿车,和一辆摩托车需要带回家。
1. 阻塞式编程:先开其中一辆回去,再回来开另一辆车回去。
2. 传统异步式编程:摩托车办理快递,我开汽车回去。注意,快递公司派件(回调)时我不一定已经开车到家,如果必须本人签收,就比较麻烦了。----此种通过回调进行异步编程的方式,没法编写符合思维顺序的代码。
3. 基于多线程的异步编程:我获得了瞬间移动的超能力(cpu计算速度提升),以毫秒级的速度在汽车与摩托车之间切换驾驶。汽车(主线程)上有车载电话,可以使用处理其它事情。----期间频繁的上下文切换,会造成额外的损耗,造成反应能力比较差,只能开到60迈。
4.并行编程:我获得了分身的超能力(多核cpu的出现),两个我同时开两辆车回家。----充分发挥了cpu的能力,没有额外切换上下文的损耗,精力充沛,在120的时速狂飙。