传统BIO网络编程知识点与Java NIO分别是怎样的
传统BIO网络编程知识点
1. 同步阻塞模型:传统的BIO网络编程采用同步阻塞模型,当一个线程接收到一个连接请求时,会一直等待直到获取到请求的数据或者超时,期间无法处理其他请求。
2. 每个请求分配一个线程:在BIO模型中,每个请求都需要分配一个线程处理,这样会导致线程数量的增多,而且线程之间切换的成本也会增加。
3. 阻塞IO:BIO模型中的Socket对象的读写操作都是阻塞的,也就是说当读写操作没有数据可读或者没有可以写的空间时,会一直阻塞在那里。
Java NIO
1. 非阻塞模型:Java NIO采用非阻塞模型,使用Selector来监听多个Channel的事件,当一个Channel有读写事件时,会通过Selector进行处理,而不是通过一个线程处理一个请求,大大减少了线程的数量。
2. 单线程处理多个请求:Java NIO模型中,一个线程可以处理多个请求的读写事件,通过Selector监听多个Channel的请求,只有当有请求可处理时才进行读写操作,提高了系统的并发处理能力。
3. 异步IO:Java NIO中的IO操作是非阻塞的,当没有数据可读或没有可以写的空间时,不会阻塞在那里,而是将该事件交给Selector进行处理,可以继续处理其他请求。
Java NIO示例代码
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class NioServer {
public static void main(String[] args) throws Exception {
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
// 设置非阻塞
socketChannel.connect(new InetSocketAddress("localhost", 8080));
// 连接服务器
while (!socketChannel.finishConnect()) {
// 等待连接完成
Thread.sleep(100);
}
String message = "Hello, Server";
ByteBuffer byteBuffer = ByteBuffer.wrap(message.getBytes());
while (byteBuffer.hasRemaining()) {
socketChannel.write(byteBuffer);
// 写入数据
}
}
}
以上代码是一个使用Java NIO实现的简单客户端连接服务器并发送消息的例子。通过配置SocketChannel为非阻塞模式,使得连接和写入操作非阻塞,等待连接完成后,将消息通过ByteBuffer写入到SocketChannel中。
猜您想看
-
如何在CS:GO中禁用烟雾特效?
如何在CS:G...
2023年04月17日 -
laravel如何安装中文语言包
如何安装Lar...
2023年07月23日 -
java怎么访问配置kerberos
1. 导入必要...
2023年07月23日 -
如何解决Pycharm里安装包慢的问题
1.更换源Py...
2023年05月26日 -
Python如何爬取网易云音乐
1. 网易云音...
2023年07月23日 -
python字典操作有哪些
1. 创建字典...
2023年05月22日