做研学的企业网站郑州做网站公司电话
做研学的企业网站,郑州做网站公司电话,福州论坛建站模板,网络培训注册会计师概念BIO 阻塞io#xff0c;1.4之前NIO no-blocking io 非阻塞io#xff0c;jdk1.4AIO 异步io#xff0c;jdk1.7浏览器输入网址#xff0c;敲下回车之后发生了什么#xff1f;1.URL解析2.DNS解析概念#xff1a;Domain Name System#xff0c;域名系统#xff0c;本质…概念BIO 阻塞io1.4之前NIO no-blocking io 非阻塞iojdk1.4AIO 异步iojdk1.7浏览器输入网址敲下回车之后发生了什么1.URL解析2.DNS解析概念Domain Name System域名系统本质上是一个分布式数据库。将人类可读的域名解析成计算机可读的IP地址解析顺序从右向左域名的层级类似于索引一级一级更有效率的查找DNS查询的两种方式递归与迭代网络协议各个层的数据包格式一个数据包叫一个帧最大1518字节经过每个层的时候会加上特定的标头信息java.io专业术语字符流相对高级处理人类可以理解和阅读的字符基本字符流高级字符流字节流相对低级处理字节1字节8bit基本字节流高级字节流设计模式装饰者模式高级流套在低级流之上Socketsocket以ipport作为唯一标识与网卡驱动进行绑定实现点对点的通信unix系统中一切皆是文件socket也不例外这就是为什么在多路复用模型中总是会提到文件描述符这个词语了。同步异步阻塞非阻塞一个表白的故事一个男生向心仪已久的女生表白同步女生想了一段时间当场给出了自己的答复异步女生说你让我考虑几天想好了我会打你电话阻塞男生心心念念茶不思饭不想一心等待着女生的答复。非阻塞男生落落大方个人生活并没有被表白这一件事情完全占据等待回复这段时间正常在做自己的事情比如打打篮球线程池本质上为了线程复用银行办理业务的故事单线程只有一个柜员顾客排队办理业务。多线程非线程池有客户就招柜员办理完了就辞退柜员再有新的顾客再重新招聘柜员这无疑是非常可笑的。线程池有一批固定的柜员平时作为常设窗口提供服务(核心线程数)业务繁忙的时候由HR去招聘一批员工(线程工厂)如果窗口已经全部开放(最大线程数)客户仍然很多就需要在大厅排队办理(工作队列)如果业务非常火爆(比如听过银行破产储户争相取款- -)整个大厅挤满了客户那么对于其他大厅外的客户银行只能说no告知暂时无法提供服务(拒绝策略)业务高峰过去之后新招的员工并不会被立即辞退只有那些长时间没有业务的员工才会被HR辞退(空闲时间)java提供的线程池(除此之外 还有手动创建ThreadpoolExecutor、ScheduledThreadpoolExecutor、Fork Join Pool)JAVA IO的前世BIO阻塞模型JAVA IO的今生NIO非阻塞模型buffer解析channel是读写双向的依赖buffer来实现通过flip()方法来实现读/写模式的翻转写模式读模式limit移动到之前写模式的最后一条position移动到起始位置。即只能读取写模式下写入到buffer中的数据如果数据全部读取完调用clear()方法重新转换成写模式limit回到最末尾position回到起始位置clear()方法其实并没有真的去清除buffer中的数据只是移动了两个指针而已但是下次再写入的时候原有数据就会被覆盖效果上等同于清除是一个很巧妙而高效的方法如果数据并未全部读完在这之前需要先转换成写模式则调用compact()方法compact()方法把之前未读完的数据复制到buffer的最前面然后把position指向紧跟着的那个位置从这个位置开始写入新的数据limit移动到末尾这样可以确保每次读的时候是从上一次未读取完的位置开始继续读取。channel解析channel之间可以直接进行数据交换几个重要的channel多方法实现文件拷贝不带缓冲区的字节流拷贝带缓冲区的字节流拷贝基于channer的buffer进行拷贝两个channel之间直接拷贝性能对比三个不同大小的文件小的400K中等的10M。大的500M四个拷贝方法均执行5次取平均值进行比较不带缓冲区的字节流拷贝性能非常差几千倍的差距其他三种方法差别不大随着文件的增大nio的方法效率相对来说比传统的bufferedStream好一些其实传统io的方法实现在新版本的jdk中已经被重写过了在jdk1.4的时候nio方法的性能要比传统io好很多目前主流的jdk1.8中底层实现差不多所以性能没有太明显的差距了。selector解析所有的channel注册在selector上面由selector来监测channel的状态变化channel的状态变化connectsocketChannel连接到了服务器上acceptserverSocketChannel接受了一个连接readchannel上有数据处于可读状态writechannel处于可写入状态在Selector上注册channel每个channel获得一个唯一的SelectionKeyinterestOps()关心的事件readyOps()就绪的事件使用selector选择channelselect()统计所有注册的channel事件就绪的个数操作完之后需要手动的重置就绪状态以便当channel再次就绪的时候selector可以正确的统计 NIO编程模型socketServerChannel注册监听accept事件,响应说明有新的socketChannel建立了连接然后对这个新的socketChannel在selector上注册监听read事件当read事件就绪的时候(buffer中有可读数据)由selector所在的线程去处理该io请求这样selector所在的这个线程可以同时处理多个io请求不像BIO模型中每个io请求都需要有一个单独的线程去一对一的阻塞处理JAVA IO的后世之师AIO异步模型内核IO模型阻塞式I/O每次系统调用阻塞知道成功返回数据为止非阻塞式I/O不停的进行系统调用没有数据就直接返回无数据知道有成功返回为止I/O多路复用不再由应用程序自身不停的进行系统调用交由selector来监听事件事件就绪的时候会返回可读条件然后应用程序发起系统调用成功返回数据异步I/O前面三种都是同步调用无论是阻塞还是非阻塞应用程序必须主动发起系统调用才能得到数据在异步I/O模型中应用程序先发起系统调用如果此时数据没有准备好则返回无数据(非阻塞)当未来的某个时间内核将数据准备好了之后就会执行相应的回调函数异步调用机制AIO中的异步操作异步实现原理基于Future异步阻塞用于客户端基于CompletionHandler异步非阻塞用于服务端 底层有一个AsyncronousChannelGroup线程池用来执行回调函数性能比nio的单线程同步非阻塞selector更高AIO模型的精髓也就在这里。AIO编程模型三种IO模型适用情境
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90846.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!