美文网首页
web中nio的理解

web中nio的理解

作者: 李炳龙_搜狐 | 来源:发表于2020-06-07 10:38 被阅读0次

传统的bio线程模型是
用户发起请求,accept得到一个socket,然后从业务线程池取出一个线程去处理该用户的请求
业务线程池线程数 + acceptCount = 最大用户连接数
业务线程池线程数 = 最大并发处理请求数
调大acceptCount可以提高最大连接数
如果希望减少线程切换的消耗且连接数不变,则应该降低线程池数,提高acceptCount

nio一般有三个线程池
创建连接线程池
非阻塞io线程池
业务线程池
最大连接数与业务线程池线程数无关,完全在于配置
业务线程池线程数=最大并发处理请求数

可见线程模型并非是nio的优势。bio和nio最终其实都是一个用户对应一个线程的。

netty nio零拷贝是java应用层的零拷贝
https://stackoverflow.com/questions/20727615/is-nettys-zero-copy-different-from-os-level-zero-copy

另外提一下,socketChannel的write方法,由于系统层面要求内存地址是固定的,而java内的byte[]是特殊的对象,gc后内存地址很可能改变,因此必须使用堆外内存。所以对于web应用,因为往往都是先转换成java内部的byte[]对象,所以必然至少要经历一次往堆外内存的拷贝。

可见,线程模型和内存拷贝方面,nio并不比bio有优势。
个人认为,web中nio的优势还是在于,可以通过单线程完成多个通道的读写。比如在一个http服务器中,我们通过非阻塞的读,直到读完一个完整的http报文(或header),才下发到工作线程,由servlet去处理。

相关文章

  • web中nio的理解

    传统的bio线程模型是用户发起请求,accept得到一个socket,然后从业务线程池取出一个线程去处理该用户的请...

  • BIO,NIO,AIO 总结

    BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 ...

  • BIO,NIO,AIO 总结

    BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 ...

  • 网络/IO基础

    一、BIO、NIO、AIO的概念 BIO,NIO,AIO的理解1BIO,NIO,AIO的理解2概念解释一个IO操作...

  • NIO教程 ——检视阅读(上)

    NIO教程 ——检视阅读 简介 NIO中的N可以理解为Non-blocking ,不单纯是New 。 不同点: 标...

  • NIO 理解

    NIO 基于通道(Channel)与缓冲区(buffer)的I/O方式,它可以使用Natvie函数库直接分配对外内...

  • springboot内嵌tomcat代码走读(二)

    离上次tomcat的代码走读过了很长时间了,这段时间主要是在自己造个类似web容器的轮子,用来加深NIO的理解。同...

  • 一文详解 | Java 中 NIO基础详解

    Netty 是基于Java NIO 封装的网络通讯框架,只有充分理解了 Java NIO 才能理解好Netty的底...

  • netty系列之(一)——netty介绍

    IO模型 一、NIO原理 Netty 是基于Java NIO 封装的网络通讯框架,只有充分理解了 Java NIO...

  • 自顶向下深入分析Netty(一)--预备知识

    Netty是基于Java NIO封装的网络通讯框架,只有充分理解了Java NIO才能理解好Netty的底层设计。...

网友评论

      本文标题:web中nio的理解

      本文链接:https://www.haomeiwen.com/subject/xkuftktx.html