Socket 与 Android Socket AIO 库 Naga 的介绍

本文介绍了Socket的基本类型(BIO、NIO、AIO)及其概念,强调了AIO在处理长连接和重数据量场景的优势。针对Android,文章探讨了Naga Socket库,一个简单的Java NIO库,实现类似Java 1.7的AIO功能,适合Android平台。Naga采用线程队列和Selector技术,提供高效低资源消耗的解决方案。文章还概述了Naga的架构和使用示例。
摘要由CSDN通过智能技术生成

最近项目要求Android客户端使用Socket,所以把Android平台能够使用的Socket调研了一下:

Socket介绍

Socket分为如下几种:BIO、NIO、AIO,在了解每种Socket之前,首先要了解几个概念:

Socket相关概念

  • 同步: 是指应用进程触发IO操作后,等待或者轮询查看IO状态是否改变。
  • 异步: 是指应用进程触发IO操作后,就去执行其它任务,当有内核进程通知应用进程IO状态发生改变,应用进程根据最新的状态进行IO操作。
  • 阻塞: 是指当IO状态改变后,进行相关IO操作时,如果IO被占用,一直处于等待,知道IO可用为止。
  • 非阻塞: 是指当IO状态改变后,进行相关IO操作时,如果IO被占用,马上返回操作结果值,当IO就绪时,IO函数会通知最新的IO状态,从而继续进行IO操作。

了解以上几个概念之后,通过不同的组合,就会形成Socket的几个种类:BIO、NIO、AIO

  • 同步阻塞(BIO): 代码行为模式为一个连接在一个线程中运行,在每个线程中如果IO处于阻塞状态,就是指一直等待IO准备就绪,知道可以继续进行操作。可用线程池提高处理性能。
  • 同步非阻塞(NIO): 代码行为模式为一个请求一个线程。每一个连接通道都会注册到多路复用器上,多路复用器会轮询所有连接通道,发现有IO请求时会启动一个线程进行处理。多路复用器需要再一个单独的线程中去执行轮询操作。
  • 异步阻塞(NIO): 代码行为模式为当应用发起IO操作后,马上就会受到状态回复,当内核处理完IO操作后,通知应用程序IO最新状态。在OS内核层,系统会调用select系统调用对IO进行处理,select会同时监听多个文件句柄,提高了并发性,但是对于每个文件句柄的读写操作时阻塞的。
  • 异步非阻塞(AIO):代码行为模式为应用进程发起一个IO操作后立即返回,等内核处理完IO操作后,会通知应用进程IO数据,应用进程取得数据进行处理即可。

如果理解不太清楚,可以通过下面例子进行辅助理解:

  • 同步阻塞: 小明去书店买书,然后一直在柜台前等着,并且一直询问:有书吗?有书吗?……
  • 同步非阻塞: 小明去书店买书,跟柜台说完后就去网吧玩了,玩一会就跑回柜台问一下:书准备好了吗?
  • 异步阻塞:小明给书店打电话说要定新书,当在网吧玩时,书店打来电话,说有新书了,小明自己去拿书。
  • 异步非阻塞:小明给书店打电话说定新书,当在网吧玩时,书店打电话说,有新书到了,并派人将新书送过来。

应用场景

  • BIO:适用于方法简单,开发速度快。但是连接数较小,对服务器性能较高,并发性差。
  • NIO:适用于连接数多且为短链接,轻数据量的服务器,比如通讯服务器,编程方式复杂,JDK1.4中引入。
  • AIO:适用于连接数少且为长连接,重数据量的服务器,比如视频服务器,充满在JDK1.7中引入,所以Android系统中,只用5.0+版
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值