wordpress如何上传文件大小,岳阳关键词优化,宣传片素材视频免费下载,生成微信小程序“网络IO模型有BIO、NIO、AIO ” “他们分别代表什么#xff0c;有什么区别吗#xff1f; BIO#xff1a;同步阻塞IO。 NIO#xff1a;同步非阻塞IO。 AIO#xff1a;异步非阻塞IO。 “BIO为什么是同步阻塞IO#xff0c;他阻塞的是谁跟谁之间的关联#xff1f;”。 首先… “网络IO模型有BIO、NIO、AIO ” “他们分别代表什么有什么区别吗 BIO同步阻塞IO。 NIO同步非阻塞IO。 AIO异步非阻塞IO。 “BIO为什么是同步阻塞IO他阻塞的是谁跟谁之间的关联”。 首先在网络编程中客户端给服务端发送消息大约分为两个个步骤。 1、发起连接。 2、发送数据。 在BIO中每一个连接都需要分配一个线程来执行假如A客户端连接了服务器但是还没有发送消息这个时候B客户端向服务器发送连接请求这个时候服务器是没有办法处理B客户端的连接请求的。 因为一个线程处理了一个客户端的连接后就阻塞住并等待处理该客户端发送过来的数据。处理完该客户端的数据后才能处理其他客户端的连接请求。 面试官“那你这个是只有一个线程的时候那我弄多个线程不就好了来一个请求连接我弄一个线程”。 我“那假如有一万个连接请求同时过来那你开启一万个线程服务端不就崩了嘛。” 面试官“那我弄一个线程池呢我最大线程数最多弄500呢”。 我“那假如有500线程只请求连接并不发送数据呢那你这个线程池不也一样废了吗。这500个请求连接上了还没有发送数据那么线程池的500个线程就没办法去处理别的请求这样照样废废了。” 面试官“那咋办呢”。 我“别慌哥有办法可以使用NIO同步非阻塞这样就不需要很多线程一个线程也能处理很多的请求连接和请求数据。” 面试官“NIO他是怎么实现一个线程处理多个连接请求和多个请求数据的呢”。 我“NIO会将获取的请求连接放入到一个数组中然后再遍历这个数据查看这些连接有没有数据发送过来。” 面试官“这招高啊”。 我“那必须滴。” 面试官“但是有个问题啊如果B和C只连接了但是一直没有发送数据那每次还循环判断他俩有没有发送数据的请求是不是有点多余了能不能在我知道B和C肯定发送了数据的情况下再去遍历他呢”。 我“那你让客户B和客户C发送数据的时候给你打一个电话不就行了然后你就只遍历他俩。” 面试官“他们也不能够给我打呀你再想一个别的办法”。 我“可以引入Epoll在JDK1.5开始引入了epoll通过事件响应来优化NIO原理是客户端的每一次连接和每一次发送数据都看作是一个事件每次发生事件会注册到服务端的一个集合中去然后客户端只需要遍历这个集合就可以了。” 面试官“那AIO有什么特点呢” 我“AIO是异步非阻塞他对于客户端的连接请求和发送数据请求是用不同的线程来处理的他是通过回调来通知服务端程序去启动线程处理适用于长连接的场景。” 三、总结 这里关于网络编程模型还没有整理完毕文章后面持续更新建议收藏。 文章中涉及到的命令大家一定要像我一样每个都敲几遍只有在敲的过程中才能发现自己对命令是否真正的掌握了。