[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]
[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]