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

我在学校志愿队做网站的经历wordpress 底部悬浮

我在学校志愿队做网站的经历,wordpress 底部悬浮,品牌建设成果,如何免费搭建wordpress概述 Java IO模型同步阻塞IO#xff08;BIO#xff09;、同步非阻塞IO#xff08;NIO#xff09;、异步非阻塞IO#xff08;AIO/NIO2#xff09;,Java中的BIO、NIO和AIO理解为是Java语言对操作系统的各种IO模型的封装 IO模型 BIO(Blocking I/O) 概述 BIO是一种同步并阻…概述 Java IO模型同步阻塞IOBIO、同步非阻塞IONIO、异步非阻塞IOAIO/NIO2,Java中的BIO、NIO和AIO理解为是Java语言对操作系统的各种IO模型的封装 IO模型 BIO(Blocking I/O) 概述 BIO是一种同步并阻塞模式,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善,但是本质上的缺点并没有得到改进(Java IO流一IO基础实践代码均为基于BIO) 适用场景 适用于连接数目比较少(小于单机1000)且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解 NIO(New I/O) 概述 NIO是一种同步非阻塞模式,是从JDK1.4引入的新的IO API,可以替代标准的BIO,NIO支持面向缓冲区的、基于Channel的IO操作(Channel负责传输,Buffer负责存储),以更加高效的方式进行文件的读写操作 执行流程 # selectorselectionKey(SocketChannelselector)可监听连接、读、写 1.服务端启动新建ServerSocketChannel注册到selector生成selectionKey(ServerSocketChannelselector)负责监听连接事件。 2.客户端启动新建SocketChannel和selector然后与服务端端口建立连接。 3.服务端selector监听到连接取出第1步的selectionKey取到ServerSocketChannel用ServerSocketChannel新建一个SocketChannel注册到selector负责监听读操作。 4.客户端建立连接成功后把SocketChannel注册到客户端的selector生成selectionKey负责监听连接事件。 5.客户端监听到第4步连接成功。取出第4步新建的selectionKey取出SocketChannel向该Channel写入HelloServer并把该Channel注册到selector负责监听读事件。 6.服务端第3步中监听读事件的selector监听到第5步客户端的事件。从selector中取出channel第3步中的那个channel从通道中读取到数据HelloServer。然后向通道写数据HelloClient。 7.客户端第5步中最后负责监听的selector监听到第6步中服务端的数据收到HelloClient。客户端完成客户端的selector继续轮询事件。 8.服务端监听到第6步中自己的写事件取到channel取消监听写事件只监听读事件。 核心组件 Channel(通道) 概述 Channel可以理解为通道,通过它可以从不同源(文件/网络等)读取和写入数据(通道是基于Buffer进行读写交互的,因为 Buffer特性所以通道可以异步地读写),因为Channel是全双工的,所以它可以比流更好地映射底层操作系统的APl 分散Scatter 聚集Gather 分散读取 将Channel中的数据按照顺序分散到多个Buffer中(即缓冲区数组)聚集写入 将多个Buffer(即缓冲区数组)中数据聚集到Channel 实现类 FileChannel主要是用于文件的读写DatagramChannel主要用于UDP读写网络中的数据SocketChannel通过TCP读写网络中的数据ServerSocketChannel主要用于服务端可以监听新进来的TCP连接像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel Channel与Stream流的区别 Buffer(缓冲区) 概述 Buffer是一个数组对象,我们可以把它理解为临时存储固定数量的写入或者读出的数据的容器.在Java NIO,任何时候访问NIO中的数据都需要通过缓冲区Buffer进行操作。读取数据时直接从缓冲区中读取,写入数据时写入至缓冲区 分类 非直接缓冲区 通过allocate方法将缓冲区分配在JVM内存中直接缓冲区通过allocateDirect方法将缓冲区分配在物理内存中,可提高效率 ByteBuffer buf ByteBuffer.allocate(1024); //创建非直接缓冲区大小为1024 ByteBuffer buffer_direct ByteBuffer.allocateDirect(1024);//创建直接缓冲区大小为1024 System.out.println(判断是否为直接缓冲区 buffer_direct.isDirect()); //true 子类 Java基本类型都对应着一种Buffer,他们都拥有相同的API, NIO最常用的缓冲区则是ByteBuffer 核心方法 allocate分配一个缓冲区put存入数据到缓冲区get获取缓冲区的数据 核心属性 capacity表示缓冲区中最大存储数据的容量,一旦声明不能改变position表示缓冲区中当前操作数据的位置 写模式下,position表示当前写入的位置,position最大为capacity-1读模式下,为读入数据的当前位置limit表示缓冲区中可以操作数据的大小(limit后数据无法读写) 写模式下,写入多少的数据,limit等于多少读模式下,表示有多少数据可读0 position limit capacity(始终不变) package com.bierce.io; import java.nio.ByteBuffer; public class TestBuffer{public static void main(String[] args) {ByteBuffer buf ByteBuffer.allocate(1024); //创建缓冲区大小为1024System.out.println(--------------未写入数据前获取各属性值-------------);System.out.println(position buf.position()); // position 0System.out.println(limit buf.limit()); //limit 1024System.out.println(capacity buf.capacity()); //capacity 1024System.out.println(--------------写入数据后获取各属性值--------------);String data data;buf.put(data.getBytes());System.out.println(position buf.position()); // position 4System.out.println(limit buf.limit()); //limit 1024System.out.println(capacity buf.capacity()); //capacity 1024System.out.println(--------------切换到读模式下获取各属性值--------------);buf.flip();buf.put(data.getBytes());System.out.println(position buf.position()); // position 4System.out.println(limit buf.limit()); //limit 4System.out.println(capacity buf.capacity()); //capacity 1024System.out.println(--------------切换到写模式下获取各属性值---------------);buf.flip();System.out.println(position buf.position()); // position 0System.out.println(limit buf.limit()); //limit 4System.out.println(capacity buf.capacity()); //capacity 1024} }Selector(选择器) 多路复用器Selector是Java NIO编程的基础,熟练地掌握Selector对于掌握NIO编程至关重要。多路复用器提供选择已就绪任务的能力,即Selector会不断地轮询注册在其上的Channel,如果某个Channel上面有新的TCP连接接入、读和写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的I/O操作。一个多路复用器Selector可以同时轮询多个Channel,由于JDK使用了epoll代替传统的select实现,所以它并没有最大连接句柄1024/2048的限制。这也就意味着只需要一个线程负责Selector的轮询,就可以介入成千上万的客户端 Pipe(管道) 概述 Java NIO管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取 示例 Pipe pipe Pipe.open(); //获取管道 //相当于一个线程写入数据到管道 Pipe.SinkChannel sinkChannel pipe.sink(); //获取sink管道,用来传送数据 ByteBuffer byteBuffer_write ByteBuffer.allocate(1024); byteBuffer_write.put(bierce Never Give up!.getBytes()); byteBuffer_write.flip(); //写入完成后转换为读模式 sinkChannel.write(byteBuffer_write); //通过sink管道发送数据//相当于另一个线程从管道读取数据 Pipe.SourceChannel sourceChannel pipe.source(); //获取source管道,用来读取数据 ByteBuffer byteBuffer_read ByteBuffer.allocate(1024); int length sourceChannel.read(byteBuffer_read); System.out.println(new String(byteBuffer_read.array(), 0, length)); //bierce Never Give up!//关闭管道资源 sourceChannel.close(); sinkChannel.close(); 适用场景 适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂 AIO(Asynchronous I/O) 概述 AIO也称为NIO2,jdk7后出现的一种异步非阻塞模式,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时操作系统会将可读的流传入read方法的缓冲区,并通知应用程序对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。 即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数(AIO 应用还不是很广泛,Netty 之前也尝试使用过 AIO,不过又放弃了) 适用场景 JDK7开始支持,适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂
http://www.dnsts.com.cn/news/253608.html

相关文章:

  • 网站开发流程 文档开发工具和开发平台
  • 手机网站做分享到微信网络营销的主要内容有哪些
  • 如何替换网站的图片中国房地产网站
  • 网站一级页面标题怎么做的怎么建设网站阿里云
  • 网站建设个人主页图网站备案 暂住证
  • 重庆璧山网站制作公司哪家专业兰州网站运营诊断
  • 手机网站小程序网站备案查询工信部app
  • 网站建设一般需要多少费用硬件开发方案
  • 建设做网站google竞价推广
  • 湛江百度网站快速排名建材网站开发
  • 广州哪里有学做网站的建立网站的
  • 机构网站建设网页框架是什么
  • 麻城网站设计一键生成广告
  • 网站制作九江wordpress首页评论
  • 网站建设哪几家好一些万维网网站301重定向怎么做
  • 购买模板建站设计师网站十大网站推荐
  • 那个网站百度收录快贵州网站建设营销公司
  • 用php做的网站必备那些文件百度竞价代运营托管
  • 深圳外贸网站制作价格承德专业做网站的公司
  • 橱柜网站模板移动端网站和app开发
  • 深圳高端网站建设美工西安网站手机网站建设
  • 校园论坛网站建设论文建设网站话术
  • 网站制作大型公司企业管理系统说明
  • 新余服装网站建设没有营业执照 怎么做网站
  • dede安装好后是模板怎么变成做好的网站企业建设网站需要注意什么手续
  • 免费php企业网站源码南昌网站建设效果
  • 传统企业如果建立网站建设图书馆网站
  • 网站改版报告国外html5做网站
  • 网站备案怎么在工信部信息核验南充房产网
  • 视频解析网站是怎么做的网站建设的个人条件