同步、异步、阻塞、非阻塞
2014-03-06 11:24
162 查看
同步:所谓的同步就是,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。通俗一点讲就是每次有仅只有一件可以干的事情,只有在这个件事情处理完了,才可以接其他的事情做。
异步:顾名思义,异步是与同步概念相对的。当一个异步进程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。通俗点说的话就是玩游戏中,突然有事,离开了下,于是点击“挂机”,当然“挂机”这种事情还是不能做太多,得有业界良心是吧。
阻塞:阻塞调用容易与同步调用混为一谈。 阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。所以区别在于同步调用时,该线程还是激活的,一直处于等待结果返回,并处理各种数据信息。
非阻塞: 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。对象的阻塞模式和阻塞函数调用,结果返回会通过select函数通知调用者。
以下一个案例是一个很经典的案例学习(大神就别瞎参合啦):
老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
老张觉得自己聪明了。
同步与异步
实际上同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。同步与异步如下图所示:
阻塞与非阻塞
简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。详细区别如下图所示:
http://www.cnblogs.com/jogger/archive/2012/09/27/2705386.html http://www.cnblogs.com/Anker/p/3254269.html
相关文章推荐
- IO中同步、异步与阻塞、非阻塞的区别
- IO操作:同步,异步,阻塞,非阻塞
- 老张喝茶 教你同步异步 阻塞与非阻塞
- 异步,同步,阻塞,非阻塞个人理解
- socket阻塞与非阻塞,同步与异步、I/O模型
- 老张喝茶 教你同步异步 阻塞与非阻塞(转)
- 【转载精品】阻塞与非阻塞、同步与异步
- socket阻塞与非阻塞,同步与异步、I/O模型
- Socket同步、异步与阻塞、非阻塞
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- 网络编程释疑之:同步,异步,阻塞,非阻塞
- IO - 同步,异步,阻塞,非阻塞
- 同步和异步关注的是消息通信机制,阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
- 同步、异步、阻塞、非阻塞
- java中同步、异步、阻塞、非阻塞
- 怎样理解阻塞非阻塞与同步异步的区别?
- socket阻塞与非阻塞,同步与异步、I/O模型
- 同步与异步 & 阻塞与非阻塞
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
- 同步、异步、阻塞和非阻塞