地址:https://mp.csdn.net/postedit/83050300
关注的是消息的通信机制,描述的是一种行为方式,是多个任务之间的关系。
① 同步: 调用者主动等待被调用方返回结果,在没有返回结果之前,就一直专职等待。
千万不要把计算机中“同步”理解成“同时执行”。
② 异步:调用者发送请求请求,不会专职等待被调用方返回结果,当被调用方有结果之后,再通知调用者,再继续执行刚才的任务。
描述的是一个任务的某一种状态。
① 阻塞:调用者当调用了被调用者时,被调用者没有返回结果之前,调用者就一直等待,描述等待的这个状态,为阻塞状态。
② 非阻塞:调用者再没有得到被调用者返回结果之前,会去执行其他的任务,描述不会等待这个状态,为非阻塞。
概念的区分
同步异步和阻塞与非阻塞
阻塞与非阻塞和同步与异步之间没有必然的联系,是两个概念 ,两个角度
阻塞是使用了同步机制的结果
非阻塞是使用了异步机制的结果。
① 非阻塞是不是一定就意味着异步?
不是,非阻塞只能决定当前任务的状态(可以不等着),是不是要去做其他的任务,不是由非阻塞决定的,是由异步决定的。
② 阻塞是不是一定意味着任务之间一定不是异步关系? 是
③ 异步是不是意味着当前的任务处于非阻塞状态? 是
④ 同步一定也意味着某一个时刻,某一个任务处于阻塞状态? 是
是任务的执行方式
① 串行:多个任务时,各个任务按照顺序执行,执行完一个任务之后,才能执行下一个任务。可以理解成同步的概念,两个任务是串行执行的===两个任务之间的关系是同步机制
② 并行:多个任务同时执行,意味着多个任务之间是异步机制。
同时处理的含义,只有【并行】是真正意义上同时处理。
① 时间上:
并行指的是多个时间同一个时刻发生。
并发是多个事件在同一个时间间隔执行。其实是切换时间片轮流执行。微观的角度(串行)
② 作用点上:
并行作用在多个实体上多个事件
并发作用在一个实体上的多个事件
③ 处理个数:
并行,多个处理器处理多个任务
并发,一个处理器处理多个任务
程序(任务)的类型
IO密集型:cpu占用率比较低,IO占用率比较高。
Cpu密集型:cpu占用率高,IO占用率低。
IO密集型更适合做并发处理。IO执行速度慢
低阶:操作系统层面实现并发,一般是针对于一门语言的库编写,不是给程序员用,python不支持
中阶:几乎所有语言都支持中阶并发。
高阶:第三方模块执行并发操作。
程序:程序可以看成一些列的指令集。静态的。
进程:当程序运行起来之后,创建一个(也可以是多个)进程。
线程:进程的基本执行单元,一个进程至少要一个线程。
进程可以看成是任务,比如洒水,扫地
线程就是基本的执行单元,执行任务的人。
一个线程只能属于一个进程
关于进程独立,线程共享的问题(重要):
进程具有独立的空间和系统资源,线程没有独立的系统资源,处于同一个进程下的线程共享该进程下的资源。
一定要避免多线程(同一个进程下)资源出现的并发修改问题————————线程不安全。
【同时】:并发
多进程:多个任务同时执行
多线程:在同一个任务中,多个线程同时执行
处理:单核cpu处理IO密集型才有效果
多线程的缺点:
(1)线程也是程序,也需要占用内存,设置的线程越多,占用内存就越多。
(2)多线程需要协调管理,需要cpu时间跟踪,cpu也会被占用一部分。
(3)最重要:多线程的共享资源不安全。导致数据不一致。
date: 2018-10-14
author: cymx66688