BIO实战、NIO编程与直接内存、零拷贝深入剖析

原生 JDK 网络编程 BIO

BIO,意为 Blocking I/O,即阻塞的 I/O。

BIO 基本上就是我们上面所说的生活场景的朴素实现。在 BIO 中类 ServerSocket 负责绑定 IP 地址,启动监听端口,等待客户连接;客户端 Socket 类的实例发起连接操作,ServerSocket接受连接后产生一个新的服务端 socket 实例负责和客户端 socket 实例通过输入和输出流进

行通信。

bio 的阻塞,主要体现在两个地方。

  • 若一个服务器启动就绪,那么主线程就一直在等待着客户端的连接,这个等待过程中主线程就一直在阻塞。
  • 在连接建立之后,在读取到 socket 信息之前,线程也是一直在等待,一直处于阻塞的状态下的。

这一点可以通过 cn.tuling.bio 下的 ServerSingle.java 服务端程序看出,启动该程序后,启动一个 Client 程序实例,并让这个 Client 阻塞住,位置就在向服务器输出具体请求之前,再启动一个新的Client 程序实例,会发现尽管新的 Client实例连接上了服务器,但是ServerSingle服务端程序仿佛无感知一样?为何,因为执行的主线程被阻塞了一直在等待第一个 Client实例发送消息过来。

所以在 BIO 通信里,我们往往会在服务器的实现上结合线程来处理连接以及和客户端的通信。

相关推荐
球求了25 分钟前
C++:继承机制详解
开发语言·c++·学习
张槊哲1 小时前
函数的定义与使用(python)
开发语言·python
北辰浮光1 小时前
[Mybatis-plus]
java·开发语言·mybatis
光而不耀@lgy1 小时前
C++初登门槛
linux·开发语言·网络·c++·后端
lkbhua莱克瓦242 小时前
用C语言实现——一个中缀表达式的计算器。支持用户输入和动画演示过程。
c语言·开发语言·数据结构·链表·学习方法·交友·计算器
Mr__Miss2 小时前
面试踩过的坑
java·开发语言
啊丢_2 小时前
C++——Lambda表达式
开发语言·c++
Chh07152 小时前
《R语言SCI期刊论文绘图专题计划》大纲
开发语言·r语言
Yeats_Liao2 小时前
Go 语言 TCP 端口扫描器实现与 Goroutine 池原理
开发语言·tcp/ip·golang
Thomas_YXQ3 小时前
Unity3D IK解算器技术分析
开发语言·搜索引擎·unity·全文检索·unity3d·lucene