阻塞与非阻塞 ,同步 与异步的区别
1 同步 与异步
同步和异步关注的是消息通信机制,同步,就是发起一个调用后,在没有得到结果前,该调用不返回,一旦调用返回,就得到返回值,
就是调用者主动等待这个 调用的结果 ,
异步相反,调用发出后,就直接返回,没有返回结果 ,当一个异步过程调用发出后,调用者不会立刻得到结果 ,而是在调用发出后,由被调用者通过状态,通知来通知被调用者,或通过回调函数 处理这个 调用,典型的异步编程 模型如node js
比如你去书店找一本书 三国演义,你给书店老板说书名后,同步是书店老板找啊找,可能找一分钟,可能一天,他找到后,再把书给你,异步是,老板让你先回去,等找到后给你回电话,
阻塞和非阻塞 关注的是程序在等待调用结果时的状态,
阻塞 是指结果返回前,程序 会一直挂起, 走直到结果返回
非阻塞是结果 返回前,程序 的该线程会一直执行,
还是上面那个例子,阻塞是,报完书名后 ,,你一直在那儿等着,什么也不干,非阻塞是,报完书名后,你去干其他事,同时中间时不时去打电话问下书店老板
阻塞/非阻塞 进程/线程需要的数据是否就绪,进程 线程是否需要等待
同步 异步 :访问数据 的方式,同步 需要主动读写数据 ,在读写数据 过程中还是会阻塞
异步只需要I/O 操作完成的通知,并不主动读写数据 ,由于操作系统 内核完成数据 读写
水壶例子,老张烧水
同步阻塞: 老张一直等水烧开
异步阻塞:老张用会响的水壶烧水,然后一直等
同步非阻塞,老张不等,时不时去看看水是否烧开
异步非阻塞,老张用会响的水壶,,然后水烧开后,老张听到响声去打水,
关键,同步 和异步关注的是消息的处理机制, 阻塞,非阻塞,关注的是进程是否被挂起,