当前位置: 首页 > wzjs >正文

苏州做网站推广哪家好seo优化对网店的推广的作用为

苏州做网站推广哪家好,seo优化对网店的推广的作用为,南通建设招聘信息网站,网站会员注册系统怎么做视频一、NIO简介 Java NIO是Java1.4引入的一种新的IO API,它提供了非阻塞式IO,选择器、通道、缓冲区等新的概念和机制。相比传统的IO,多出的N不单纯是新的,更表现在Non-blocking非阻塞,NIO具有更高的并发性、可扩展性以及…

一、NIO简介

Java NIO是Java1.4引入的一种新的IO API,它提供了非阻塞式IO,选择器、通道、缓冲区等新的概念和机制。相比传统的IO,多出的N不单纯是新的,更表现在Non-blocking非阻塞,NIO具有更高的并发性、可扩展性以及消耗资源少的优点。

二、NIO与传统的BIO

NIO:同步非阻塞的,服务器实现模式为1一个线程处理多个连接。服务端只会创建一个线程负责管理Selector(多路复用器),Selector不断的轮询注册在其上的Channel(通道)中的IO事件,并将监听到的事件进行处理。

BIO:全称是Blocking IO,同步阻塞式IO,是JDK1.4之前的传统IO模型,服务器实现模式为一个连接一个线程,每当客户端有连接请求时服务端都会创建一个新的线程。

两者主要区别:

阻塞与非阻塞:

BIO是阻塞I/O模型,当线程执行读或写操作时,如果数据没有准备好,线程会一直阻塞,直到数据准备好或操作完成。这种模型在处理大量并发连接时,性能较差,因为每个连接都需要一个独立的线程来处理。

NIO是非阻塞I/O模型,线程在执行读或写操作时,如果数据没有准备好,线程不会阻塞,而是立即返回。线程可以继续处理其他任务,等到数据准备好时再进行处理。这种模型可以更高效地处理大量并发连接,因为一个线程可以同时处理多个连接。

同步与异步:

BIO是同步I/O模型,线程在执行I/O操作时,必须等待操作完成才能继续执行后续任务。这种模型在处理大量并发连接时,性能较差,因为每个连接都需要一个独立的线程来处理。

NIO是同步非阻塞I/O模型,线程在执行I/O操作时,不需要等待操作完成,可以继续执行其他任务。这种模型可以更高效地处理大量并发连接,因为一个线程可以同时处理多个连接。

缓冲区:

BIO使用流(Stream)进行数据传输,数据是直接从一个流传输到另一个流,没有缓冲区。这种模型在处理大量数据时,性能较差,因为每次传输的数据量较小。

NIO使用缓冲区(Buffer)进行数据传输,数据首先被写入缓冲区,然后再从缓冲区传输到目标。这种模型可以更高效地处理大量数据,因为可以一次性传输大量数据。

选择器:

BIO没有选择器(Selector)的概念,每个连接都需要一个独立的线程来处理。这种模型在处理大量并发连接时,性能较差,因为每个连接都需要一个独立的线程来处理。

NIO引入了选择器(Selector)的概念,一个线程可以通过选择器同时监控多个通道(Channel)的I/O事件。这种模型可以更高效地处理大量并发连接,因为一个线程可以同时处理多个连接。

三、NIO的工作流程

1.创建Selector

Selector是NIO的核心组件之一,用于监控多个Channel的状态。通过Selector.open()方法可以创建一个Selector实例。

Selector selector = Selector.open();

2.创建Channel并注册到Selector

Channel是NIO中用于数据传输的通道。常见的Channel类型包括SocketChannelServerSocketChannelFileChannel。创建Channel后,需要将其注册到Selector上,并指定感兴趣的事件类型(如OP_READOP_WRITEOP_CONNECTOP_ACCEPT)。

ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.socket().bind(new InetSocketAddress(8080));
serverChannel.register(selector, SelectionKey.OP_ACCEPT);

3.轮询Selector

通过Selector.select()方法可以轮询已注册的Channel,检查是否有事件发生。该方法会阻塞,直到至少有一个Channel上的事件发生。

while (true) {int readyChannels = selector.select();if (readyChannels == 0) continue;Set<SelectionKey> selectedKeys = selector.selectedKeys();Iterator<SelectionKey> keyIterator = selectedKeys.iterator();while (keyIterator.hasNext()) {SelectionKey key = keyIterator.next();if (key.isAcceptable()) {// 处理连接事件} else if (key.isReadable()) {// 处理读事件} else if (key.isWritable()) {// 处理写事件}keyIterator.remove();}
}

4.处理事件

根据SelectionKey的事件类型,进行相应的处理。例如,如果是OP_ACCEPT事件,表示有新的客户端连接,可以调用ServerSocketChannel.accept()方法接受连接,并将新的SocketChannel注册到Selector上。

if (key.isAcceptable()) {ServerSocketChannel server = (ServerSocketChannel) key.channel();SocketChannel client = server.accept();client.configureBlocking(false);client.register(selector, SelectionKey.OP_READ);
}

5.读写数据

对于OP_READOP_WRITE事件,可以通过Buffer进行数据的读写操作。Buffer是NIO中用于存储数据的容器,常见的类型包括ByteBufferCharBuffer等。

if (key.isReadable()) {SocketChannel client = (SocketChannel) key.channel();ByteBuffer buffer = ByteBuffer.allocate(1024);int bytesRead = client.read(buffer);if (bytesRead > 0) {buffer.flip();byte[] data = new byte[buffer.limit()];buffer.get(data);System.out.println(new String(data));}
}

6.关闭资源

在处理完所有事件后,需要关闭ChannelSelector,释放系统资源。

serverChannel.close();
selector.close();

总结

NIO的工作流程主要包括创建Selector、注册Channel、轮询事件、处理事件以及读写数据。通过非阻塞的方式,NIO能够高效地处理大量并发连接,适用于高并发的网络应用场景。

四、NIO核心组件

Java NIO的核心组件包括ChannelBufferSelector等。

Channel

Channel是NIO中用于数据传输的通道,类似于传统I/O中的流,但支持双向数据传输。常见的Channel实现类包括:

  • FileChannel:用于文件读写。
  • SocketChannel:用于TCP网络通信。
  • ServerSocketChannel:用于监听TCP连接。
  • DatagramChannel:用于UDP网络通信。
SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("example.com", 80));
Buffer

Buffer是NIO中用于存储数据的容器,支持读写操作。常见的Buffer实现类包括:

  • ByteBuffer:存储字节数据。
  • CharBuffer:存储字符数据。
  • IntBuffer:存储整数数据。
  • FloatBuffer:存储浮点数数据。
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put("Hello, World!".getBytes());
buffer.flip();
while (buffer.hasRemaining()) {System.out.print((char) buffer.get());
}
Selector

Selector是NIO中用于多路复用的组件,允许单线程处理多个Channel。通过Selector,可以监控多个Channel的I/O事件(如连接、读、写等),并在事件发生时进行处理。

Selector selector = Selector.open();
SocketChannel channel = SocketChannel.open();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ);
while (true) {int readyChannels = selector.select();if (readyChannels == 0) continue;Set<SelectionKey> selectedKeys = selector.selectedKeys();Iterator<SelectionKey> keyIterator = selectedKeys.iterator();while (keyIterator.hasNext()) {SelectionKey key = keyIterator.next();if (key.isReadable()) {// 处理读事件}keyIterator.remove();}
}

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

http://www.dtcms.com/wzjs/496320.html

相关文章:

  • 创业做招商加盟类网站赚钱市场营销案例分析
  • 哈尔滨 网站建设学历提升
  • 电子政务网站建设公司排行榜中国国家人事人才培训网证书查询
  • 设计手机网站软件零基础能做网络推广吗
  • 济南网站建设 贯日舆情分析
  • 长春建站平台百度查重软件
  • seo网站运营网络营销服务有哪些
  • wordpress 点赞按钮关键词排名优化软件策略
  • 网站是哪家公司开发的网址大全下载到桌面
  • 进行网站建设视频教程换友情链接的网站
  • 工程公司年终工作总结seo网站排名优化公司哪家好
  • 自己做网站的流程视频沈阳seo网站关键词优化
  • 卫计委局官方网站开发区个人怎么做免费百度推广
  • 山东建设厅网站专职安全员品牌网络推广方案
  • 网站建设文案站外推广方式有哪些
  • 江宁网站建设公司网络项目发布网
  • 山东招聘网站建设百度快速排名化
  • 电影网站建设报价智慧软文发稿平台官网
  • 文章标签 wordpressseo是什么意思啊
  • 建设b2c商城网站定互联网营销培训班
  • 迅优网类似网站2022年最新热点素材
  • 学校网站下载如何写软文
  • 网站开发的基本流程和步骤上往建站
  • 服装网站建设可行性分析产品seo优化
  • 网站建设应用技术郑州seo优化外包
  • 太原做手机网站建设发帖秒收录的网站
  • 网站有个栏目不想被搜索引擎收录要怎么办如何开网店
  • html css js手机 移动 网站 分享连接 一键分享网站工具查询
  • 门户网站首页模板下载百度注册入口
  • 山东房地产新闻关键字优化用什么系统