IO - 同步,异步,阻塞,非阻塞,AIO

[b] IO - 同步,异步,阻塞,非阻塞[/b]

[b]阻塞与非阻塞(进程有没有挂起)[/b]
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.(就是进程有没有被挂起)

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。


[b]同步与异步(调用有没有等待返回结果)[/b]
同步和异步关注的是消息通信机制(调用得到的是不是结果(想要的内容),而不是设置状态和操作状态的返回)

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

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


[b]阻塞I/O模型(同步阻塞)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8581/331c4a60-9125-3a17-aabe-eb4300e7815e.jpg[/img]

blocking IO的特点就是在IO执行的两个阶段都被block了


[b]非阻塞IO模型(同步非阻塞)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8583/e575253c-27c5-30ae-a309-dee5248f4d19.jpg[/img]

IO执行的第二个阶段被block了


[b]IO复用模型(同步阻塞(但可以同时处理多个IO))[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8585/f1dd6c09-ac1e-304c-a39a-1368dd8d2f22.jpg[/img]

两个阶段都被block了


[b]信号驱动IO(异步)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8587/41439b70-f255-30db-9ae2-5b4720115ce4.jpg[/img]

第二个阶段被block了


[b]异步IO模型(异步非阻塞)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8589/9fc57f68-c6ad-30a7-a6b8-5a89cab820c4.jpg[/img]

二个阶段没有被block,但占用内存空间较多(因为要准备好数据空间用于内核将数据复制到用户空间)


[b]5个I/O模型的比较[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8591/f60dbc09-bfee-309a-a936-1a4be376d22e.jpg[/img]


[b]AIO(异步非阻塞IO):[/b]
就是在进行IO调用时要准备好数据存放的空间,调用时告诉内核这个空间的地址,当有数据到达时,内核在这个
空间中得到数据或写数据到这个空间,内核读/写好后就发送通知或回调使进程知道这个事。


参考原文件:[url]http://www.cnblogs.com/renxs/p/3683189.html[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值