首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Mina原理及其使用(一)

2012-06-30 
Mina原理及其应用(一)????最近做一个android app的服务器端开发,而以前接触到的无非都是通过多线程编程来

Mina原理及其应用(一)

????最近做一个android app的服务器端开发,而以前接触到的无非都是通过多线程编程来处理socket并发连接,但是考虑到一旦并发连接数达到一定的数量级,服务器肯定会效率直线下降而且容易死掉,所以就想采取Apache的网络通信框架Mina来实现通信功能,由于也是初步接触,下面对一些简单的原理东西做一些总结。

????谈论Mina前必须得清楚的是一些简单的通信概念

??? I/O操作

??? 进程执行I/O操作,归结起来,也就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么用数据把缓冲区填满(读)。进程使用这一机制处理所有数据进出操作。操作系统内部处理这一任务的机制,其复杂程度可能超乎想像,但就概念而言,却非常直白易懂。

??? 图1-1简单描述了数据从外部磁盘向运行中的进程的内存区域移动的过程。进程使用read( )系统调用,要求其缓冲区被填满。内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写入内核内存缓冲区,这一步通过DMA完成,无需主CPU协助。一旦磁盘控制器把缓冲区装满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行read( )调用时指定的缓冲区。

??图1-1?I/O缓冲区操作简图

??? Mina原理及其使用(一)

??????? I/O模型

??????? 图 1-2. 基本 Linux I/O 模型的简单矩阵

?????? Mina原理及其使用(一)

????由图1-2可知I/O模型可以分为四种

??? 1.同步阻塞

????2.同步非阻塞

??? 3.异步阻塞

??? 4.异步非阻塞

?

??? 1.同步阻塞I/O

从应用程序的角度来说,read 调用会延续很长时间。实际上,在内核执行读操作和其他工作时,应用程序的确会被阻塞。

??? I/O 密集型与 CPU 密集型进程的比较

非阻塞的实现是 I/O 命令可能并不会立即满足,需要应用程序调用许多次来等待操作完成。这可能效率不高,因为在很多情况下,当内核执行这个命令时,应用程序必须要进行忙碌等待,直到数据可用为止,或者试图执行其他工作。正如图 3 所示的一样,这个方法可以引入 I/O 操作的延时,因为数据在内核中变为可用到用户调用 read 返回数据之间存在一定的间隔,这会导致整体数据吞吐量的降低。

????? 3.异步阻塞I/O
????? 另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。在这种模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。使 select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通知。对于每个提示符来说,我们可以请求这个描述符可以写数据、有读数据可用以及是否发生错误的通知。

???? Mina原理及其使用(一)

select 调用的主要问题是它的效率不是非常高。尽管这是异步通知使用的一种方便模型,但是对于高性能的 I/O 操作来说不建议使用。

???? 4.异步非阻塞I/O(AIO)

???? 最后,异步非阻塞 I/O 模型是一种处理与 I/O 重叠进行的模型。读请求会立即返回,说明 read 请求已经成功发起了。在后台完成读操作时,应用程序然后会执行其他处理操作。当 read 的响应到达时,就会产生一个信号或执行一个基于线程的回调函数来完成这次 I/O 处理过程。

??? Mina原理及其使用(一)

在一个进程中为了执行多个 I/O 请求而对计算操作和 I/O 处理进行重叠处理的能力利用了处理速度与 I/O 速度之间的差异。当一个或多个 I/O 请求挂起时,CPU 可以执行其他任务;或者更为常见的是,在发起其他 I/O 的同时对已经完成的 I/O 进行操作。

???参考:使用异步 I/O 大大提高应用程序的性能 http://www.ibm.com/developerworks/cn/linux/l-async/

??????????? ?Java NIO Ron Hitchens 著

?

?????


?

热点排行