码迷,mamicode.com
首页 > 其他好文 > 详细

简述IO

时间:2015-09-02 22:01:08      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

首先两个区别:

  • 同步(synchronized)、异步(asynchronized)IO的区别:多个IO事件,轮询处理就是同步IO;分时间片处理就是异步IO。
  • 阻塞、非阻塞阻塞意思是IO要彻底完成非阻塞是说操作后立即返回状态码,不等IO完成

 

一般来说,IO分为下面这几类:

Blocking IO

同步阻塞。
可以理解为一个线程处理一个connection多线程下非常低效(大量的线程上下文切换)。比如说:一个线程处理一个socket。
 

non-blocking IO

同步非阻塞。与java的nio(new-io)是有区别的。java的nio简单来说就是实现了reactor模型+缓冲区。而这里的non-blocking-IO是说的一个socket未完成任务情况下立即响应一个状态码。客户端要轮询查询是否真正完成。
 

IO multiplexing

异步阻塞。就是说的reactor模型。
相当常用、常见的IO模型。 C的libevent,java的nio等都是基于这个模型实现的的。
一个主线程处理事件队列,把事件分发给worker处理,worker来响应。
缺点是“主线程处理事件队列”是一个相对阻塞的动作。
 
题外话,reactor模型一般都是基于事件驱动的,而事件驱动就是观察者模式

asynchronous IO

异步非阻塞。

也就是proactor模型。彻底的实现情况。

对比起reactor接收事件,该处不阻塞了。并且响应的动作也由一个统一入口处理,也不阻塞。

然而实现复杂,并且很多都要操作系统支持才能实现。

 

好内容分享:

http://www.cnblogs.com/fanzhidongyzby/p/4098546.html

 

简述IO

标签:

原文地址:http://www.cnblogs.com/ELMND/p/4779413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!