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 通信里,我们往往会在服务器的实现上结合线程来处理连接以及和客户端的通信。

相关推荐
不想看见40420 小时前
C++八股文【详细总结】
java·开发语言·c++
2401_8916558120 小时前
此电脑网络位置异常的AD域排错指南的技术文章大纲
开发语言·python·算法
江公望20 小时前
C++11 std::function,10分钟讲清楚
开发语言·c++
leaves falling20 小时前
C++入门基础
开发语言·c++
huaweichenai20 小时前
java的数据类型介绍
java·开发语言
C羊驼20 小时前
C语言:随机数
c语言·开发语言·经验分享·笔记·算法
fengfuyao98520 小时前
CH552多功能音量调节旋钮设计与实现
c语言·开发语言
xushichao198920 小时前
实时数据压缩库
开发语言·c++·算法
liurunlin88821 小时前
Go环境搭建(vscode调试)
开发语言·vscode·golang
故事和你9121 小时前
sdut-python-实验四-python序列结构(21-27)
大数据·开发语言·数据结构·python·算法