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

相关推荐
.千余4 分钟前
【C++】深挖STL list底层:解迭代器与节点存储逻辑
开发语言·c++·笔记·学习·其他
淡水瑜6 分钟前
C# 实操
开发语言·c#
雪落漂泊6 分钟前
C++ 继承与多态(上)
开发语言·c++
skywalk81637 分钟前
我想基于kotti-py312 ,制作一个多中文编程语言的宣传网站,主要包括文档、playground 示例和学习 (Codearts制作)
开发语言·学习·编程
聆风吟º12 分钟前
【C++11新章】列表初始化详解
开发语言·c++·列表初始化
闪电悠米19 分钟前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
Shadow(⊙o⊙)25 分钟前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
指尖的爷32 分钟前
C++头文件的作用
开发语言·c++
keykey6.32 分钟前
反向传播与梯度下降:神经网络如何学习
开发语言·人工智能·深度学习·机器学习
阿洛学长37 分钟前
最新PHPStudy安装教程(小皮V8.1)
php