BIO与NIO的比较

一.  线程数

        BIO:一个客户端连接就要使用一个服务端线程来进行处理

                  可能会有大量的想爱你成处于休眠状态,只是等待输入或输出(阻塞)

                  为每个线程分配调用栈,大约1M,服务端内存吃紧

                  即使服务端内存很大,线程数太大会导致线程上下文切换浪费大量时间

        NIO:一个服务端线程操作一个Selector,就可以处理成千上万的客户端连接

二.  阻塞情况

        BIO:读、写、接受连接都会发生阻塞

        NIO:只有Selector.select()会阻塞,其实是等待Channel上的“就绪事件”

三.  面向对象

          BIO:面向流

          NIO:面向Buffer

四.  适合点

           BIO:如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合

           NIO:如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。

你可能感兴趣的:(BIO与NIO的比较)