网络IO总结文

IO

I/O前言——五种IO通信模型

I/O前言——五种IO通信模型

多路复用IO模型
I/O多路复用模型 select

I/O多路复用模型 select

I/O多路复用模型 poll

I/O多路复用模型 poll

I/O多路复用 epoll

I/O多路复用 epoll

Linux实现
Linux I/O 多路复用 epoll

Linux I/O 多路复用 epoll

理解 linux epoll的实现原理

BIO

BIO示例

BIO示例

BIO实现

在这里插入图片描述

1. 执行ServerSocket构造函数

ServerSocket构造函数源码分析

2. BIO ServerSocket.accept()等待客户端请求

BIO ServerSocket.accept()等待客户端请求

BIO组件
ServerSocket

ServerSocket类

Socket

Socket

SocksSocketetImpl

SocksSocketetImpl类

windows平台组件
PlainSocketImpl

PlainSocketImpl

DualStackPlainSocketImpl

DualStackPlainSocketImpl 本地方法的各种封装

InetSocketAddress

InetSocketAddress 封装套接字信息(IP+端口)

NIO

NIO总结文——一篇读懂NIO整个流程

NIO总结文——一篇读懂NIO整个流程

NIO示例

NIO示例

NIO服务端工作过程

在这里插入图片描述

1. NIO服务端准备工作

NIO服务端准备工作

2. this.selector.select()查找到来的感兴趣事件

NIO this.selector.select()

3. 感兴趣的事件到来

NIO select() >0—— 处理到来的事件!

组件
SelectorProvider

SelectorProvider

SelectorProviderImpl

SelectorProviderImpl

Selector

NIO组件二 Selector

Channel

Channel

ServerSocketChannel

ServerSocketChannel

ServerSocketChannel 与 ServerSocket的比较

ServerSocketChannel 与 ServerSocket的比较

ServerSocketChannelImpl

ServerSocketChannelImpl

SocketChannelImpl

SocketChannelImpl

FileChannel

FileChannel

SelectionKey

NIO组件 Selector之 SelectionKey 、 SelectionKeyImpl

Pipe

NIO Pipe

Net

NIO组件 Net

NIO客户端(粗略)
NIO 客户端创建Channel

NIO 客户端创建Channel

NIO 客户端发起连接

NIO 客户端与服务端交互细节

思考
从BIO到NIO、再到Netty

从BIO到NIO、再到Netty

知识点的梳理
NIO
线程关系

在上文NIO示例中,仅仅只有一个main线程并没有创建额外线程,也就是说Selector、Channel处理在同一个线程,通过Selector实现轮询的NIO有如下特点:

  • 单线程处理多通道通信
  • select方法阻塞(使得处理Channel中的事件通过同步实现)

这种经典NIO方式和BIO相比最大的意义在于将面向连接处理改变为面向事件处理。

Selector、Channel处理在同一个线程这样做依然是具有优化空间的,也就是在Selector的基础上加入多线程处理,此时的多线程处理和BIO的多线程处理已经意义不同,对于额外线程的使用会更有效。

Channel的意义

在BIO实现中,流和Socket直接连接,你可以理解为:

一个水龙头的一方是水源(客户端),另一方是一个人(服务端),这个人要喝水,但是没有器皿,所以只能一直在水龙头下等待未知的水源输送,即使这会没有水,人还是要等待,因为必须要保证能够接收水源。

BIO就是这样的,BIO可以实现非阻塞,但是BIO最大的问题在于流直接与Socket通信。

我们之前分析NIO是块编程,其实就是BIO的基础上加入缓存实现

NIO 零拷贝

拓展

NIO Buffer

TODO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值