02RPC - socket nio原理

简介: 02RPC - socket nio原理

NIO是New IO 的简称,在jdk1.4 里提供的新api 。Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer)缓存支持,字符集编码解码解决方案。

Channel : 一个新的原始I/O 抽象。 支持锁和内存映射文件的文件访问接口。 提供多路(non-bloking) 非阻塞式的高伸缩性网络I/O 。

传统的I/O

使用传统的I/O程序读取文件内容, 并写入到另一个文件(或Socket), 如下程序:

File.read(fileDesc, buf, len);
Socket.send(socket, buf, len);

会有较大的性能开销, 主要表现在一下两方面:

1.上下文切换(context switch), 此处有4次用户态和内核态的切换。

2.Buffer内存开销, 一个是应用程序buffer, 另一个是系统读取buffer以及socket buffer。

其运行示意图如下:

1.先将文件内容从磁盘中拷贝到操作系统buffer

2.再从操作系统buffer拷贝到程序应用buffer

3.从程序buffer拷贝到socket buffer

4.从socket buffer拷贝到协议引擎.

NIO

NIO技术省去了将操作系统的read buffer拷贝到程序的buffer, 以及从程序buffer拷贝socket buffer的步骤, 直接将 read buffer 拷贝到 socket buffer. java 的 FileChannel.transferTo() 方法就是这样的实现, 这个实现是依赖于操作系统底层的sendFile()实现:

public void transferTo(long position, long count, WritableByteChannel target);

它的底层调用的是系统调用sendFile()方法

sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

如下图:

目录
相关文章
|
8月前
|
缓存 安全 Java
由浅入深Netty基础知识NIO三大组件原理实战 2
由浅入深Netty基础知识NIO三大组件原理实战
48 0
|
8月前
|
Java
由浅入深Netty基础知识NIO三大组件原理实战 1
由浅入深Netty基础知识NIO三大组件原理实战
61 0
|
7月前
|
安全 网络协议 Java
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
Thread类的用法 && 线程安全 && 多线程代码案例 && 文件操作和 IO && 网络原理初识 &&UDP socket
40 0
|
5月前
百度搜索:蓝易云【Socket网络通信过程 与 IO多路复用原理。】
以上是Socket网络通信过程和IO多路复用原理的简要说明。它们是网络编程和IO处理中重要的概念和技术,对于构建高性能的网络应用程序非常有价值。
36 0
|
6月前
|
网络协议 Unix Linux
高效网络通信技术揭秘,Socket原理与实践(下)
高效网络通信技术揭秘,Socket原理与实践
|
6月前
|
网络协议 Unix Linux
高效网络通信技术揭秘,Socket原理与实践(上)
高效网络通信技术揭秘,Socket原理与实践
|
9月前
|
网络协议 Java API
【网络原理】网络编程Socket套接字基础知识汇总
【网络原理】网络编程Socket套接字基础知识汇总
|
10月前
|
存储 网络协议 Java
|
11月前
|
缓存 Java
Java NIO实战篇:使用Socket实现报文交互
Java NIO实战篇:使用Socket实现报文交互
128 0
|
存储 消息中间件 监控
Socket原理与基本操作
Socket原理与基本操作
Socket原理与基本操作