多线程part2-多线程的两个概念
并发(concurrent)
同一时间应对多件事情的内力
同一时刻,有多个指令在单个CPU上交替执行
理解:打游戏的时候,右手操作鼠标,同时用右手喝可乐,手速特别快交替执行,这时,你的右手相当于CPU,执行的对象相当于线程
家庭主妇做饭、打扫卫生、喂奶,一个人轮流交替做多件事情,这就是并发
并行(parallel)
同一时间动手做多件事情的能力
同一时刻,有多个指令在多个CPU上同时执行
理解:关键点在于同时
家庭主妇雇佣保姆,一个保姆专门做饭,一个保姆专门打扫卫生、一个保姆专门喂奶,这就是并行
多线程应用——异步调用
从方法调用的角度来看
需要等待结果返回,才能继续运行就是同步
不需要等待结果运行,就能继续运行就是异步
注意:同步在多线程中还有另外一层意思,是让多个线程步调一致
多线程可以让方法执行变成异步,这就可以让我们实现文件运输的优化,如果是同步情况下,那么读取磁盘文件,光是读取这一个操作就只能眼巴巴的等着他执行完后才能继续执行
应用
视频文件需要转换格式等操作
tomcat的异步servlet,让用户线程处理耗时较长的操作,避免阻塞tomcat的工作线程
结论
单核CPU下,多线程不能实际提高程序执行效率,只是可以在不同的任务之间切换,不同线程轮流使用cpu
多核CPU下,是否提高程序执行效率需要分情况
有些任务,经过设计,可以进行拆分,这当然可以提高效率
也不是所有任务需要拆分
IO操作不占用CPU,只是我们一般拷贝文件使用的是阻塞IO,这是相当于线程不用CPU但是要一直等待IO结束,没有充分利用线程,所以才有后续的非阻塞IO和异步IO的优化
IO操作是要等磁盘里面的数据读出来进入CPU处理,读数据的时候不归CPU管。但是因为进程需要这个IO的数据,所以需要等待IO结束了才能继续运行(进程阻塞)。