并发和并行,多线程和多进程,单核和多核,同步和异步的关系

并发拥有处理多个任务的能力,不一定要同时,不同代码块交替执行的性能,可以串行处理也可以并行处理

并行:同时处理多个任务的能力,不同代码块同时执行的性能

串行:指多个任务时,各个任务按顺序执行,完成一个之后才能执行下一个


同步所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。


异步异步则相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。

异步的实现①异步回调(多线程实现)

                 ②消息队列(多线程实现)

                 ③协程(时间片分隔实现)



线程是CPU调度的基本单元


对于单核:多线程和多进程的多任务是在单cpu交替执行(时间片轮转调度,优先级调度等),属于并发

对于多核:同一个时间多个进程运行在不同的机器上或者同一个机器不同核心上,或者是同一个时间多个线程能分布在同一机器的不同核心上(线程数小于内核数),属于并行。


a.多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。

b.单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。

c.单核CPU——IO密集型任务,使用多线程还是为了人机交互方便,

d.多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样。

猜你喜欢

转载自blog.csdn.net/Hahaha_Val/article/details/79635248