
NIO
文章平均质量分 73
Good LA
这个作者很懒,什么都没留下…
展开
-
NIO之多Selector多线程模式(四)
细节重点!Selector.select()只对这个方法被调用前注册进来的事件才会被监听。如果在这个方法阻塞后,有其他线程往这个selector注册事件,不会被监听到!这个带来的影响直接影响多线程多Selector的程序设计!!!初步引入netty原理图,帮助理解上述细节下图中,select->processSelectedKeys->runAllTasks在while(true)中不断循环(loop),select从阻塞返回,处理相应的keys后,调用runAllTasks方法,将se原创 2021-01-10 13:04:54 · 2414 阅读 · 1 评论 -
NIO演进(三)
上一篇NIO代码的优缺点优点使用selector多路复用器,一次性访问内核可以传输全量连接(fds),并且一次性得到批量fds的状态,完成连接、读写操作。减少和内核交互次数带来的性能提升缺点当读事件到来时,while(true)主流程进入阻塞状态,必须要等待读写完成后才可以处理下一个事件,降低传输效率,也存在超时风险。可以将读事件拆分成读和写两个独立事件,并给另外的线程处理,这样不会影响主流程的线程处理后面的连接。针对存在的缺点改进版本一拆分读事件,写成独立读和写事件,但是未使用多线程处原创 2021-01-09 03:58:07 · 1128 阅读 · 3 评论 -
初探NIO(二)
NIO的优势和缺点从NIO和BIO比较中,知道NIO只需要更少的系统资源就可以处理多连接请求。那么NIO又有哪些可以改进的地方呢?优势通过一个线程就可以处理N个IO连接请求。缺点虽然NIO是非阻塞的,但是依然存在许多无意义的系统调用(比如read的时候返回null,执行了一次系统调用却无实际意义),频繁的用户态和内核态空间的切换成为了NIO的性能瓶颈。使用多路复用器可以解决这个问题。多路复用器引入多路复用器前,NIO会在循环中一个一个IO通道去看是否有数据可读,每一次询问就有一次系统原创 2021-01-06 02:57:30 · 205 阅读 · 0 评论 -
BIO与NIO浅析(一)
BIO与NIO的区别BIO的accept和read方法都是阻塞的,因此需要结合多线程才可以同时处理多个连接。NIO的accept和read方法可以设置成非阻塞的,当设置成非阻塞时,如果没有新连接或数据,linux返回-1,java返回null。BIO实例下列实例很好体会到BIO为什么一定要结合多线程处理多个连接请求。如果在单线程处理,前面的连接阻塞了,后面的连接无法进来。因此在BIO中,可以认为来一个连接就要分配一个线程处理,即使使用线程池,也无法满足大量的连接请求。public static原创 2021-01-05 02:29:28 · 211 阅读 · 1 评论