netty权威指南读书笔记——走进java nio

netty权威指南读书笔记——走进java nio一、linux网络IO模型:linux将所有外部设备都当作文件处理,对一个文件的读写操作通过调用内核命令执行,返回一个filedescriptor(fd文件描述符),而对于一个socket也有对应的socketFD,描述符是一个数字,指向内核中的一个结构体(文件路径,数据区属性等)。1、unix提供了5种I/O模型:a、阻塞I/O模型(默认模型):应用进程调用recvfrom后,系统调…


Jetbrains全系列IDE稳定放心使用

一、linux网络IO模型:linux将所有外部设备都当作文件处理,对一个文件的读写操作通过调用内核命令执行,返回一个file descriptor(fd 文件描述符),而对于一个socket也有对应的socketFD,描述符是一个数字,指向内核中的一个结构体(文件路径,数据区属性等)。

1、unix提供了5种I/O模型:

a、阻塞I/O模型(默认模型):应用进程调用recvfrom后,系统调用直到数据包到达并被复制到应用缓存中或发生错误才返回,期间应用进程一直被阻塞。

b、非阻塞I/O模型:调用recvfrom后,若系统缓冲区没有数据,则直接返回一个ewouldblock错误,之后轮询检查该状态,若数据到达则复制到应用缓存中后返回。

c、I/O复用模型:linux提供select/poll,应用程序将一个或多个fd传递给select/poll系统调用,然后阻塞在select上,这样可以同时侦测多个fd是否处于就绪状态,select/poll顺序扫描fd是否就绪,且支持到fd数量有限。此外Linux提供了epoll基于事件模式的驱动,当有fd就绪时,就立即调用回掉函数rollback。数据拷贝到应用缓存区期间,应用进程被阻塞。

d、信号驱动I/O模型:首先开启信号驱动I/O功能,并通过系统调用sigaction执行一个信号处理函数(立即返回,非阻塞),数据准备就绪后,为该进程生成一个sigio信号,并通知应用程序调用recvfrom读取数据(拷贝数据到应用缓存期间阻塞),拷贝完成返回。

e、异步I/O:告知内核启动某个操作,并在操作完成后通知我们(包括将数据从内核复制到应用缓冲区)。与信号驱动模式到区别是:信号I/O由内核告诉我们何时开始一个I/O操作;异步I/O由内核告诉我们何时完成了I/O操作。

2、多路复用:在i/o编程中,当需要处理多个客户请求,可利用多线程或i/o多路复用技术进行处理。i/o多路复用通过将多个i/o阻塞f复用到同一个select阻塞上,从而使得系统可以使用单线程处理多个客户端请求。i/o多路复用主要应用场景包括:

a、服务器需要同时处理多个处于监听状态或链接状态到socket;

b、服务器需要同时处理多种网络协议到socket;

目前支持i/o多路复用的系统调用包括:select、pselect、poll、epoll。

相比select、epoll有诸多优点,包括:

a、一个进程打开的socketFD不受限制(仅受限于操作系统的最大文件句柄数,跟系统内存关系较大),select模式通过多进程select或者改动FD_SETSIZE编译到内核的方式增大fd数量;

b、I/O效率不受fd数目的增加而线性下降,select采用轮询fd,epoll通过活跃的fd进行事件回掉;

c、使用mmap加速内核和用户空间的消息传递,无论使用select还是epoll都要将内核数据复制到应用缓冲区,epoll通过内核和用户空间mmap同一块内存实现;

d、epoll的api更加简单;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186818.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • row_number() OVER (PARTITION BY COL1 ORDER BY COL2)「建议收藏」

    row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

    2022年1月23日
  • linux重命名文件和文件夹的区别_文件夹如何重命名

    linux重命名文件和文件夹的区别_文件夹如何重命名Linux重命名文件和文件夹1.mvlinux下重命名文件或文件夹的命令mv即可以重命名,又可以移动文件或文件夹。例子:将目录A重命名为BmvAB将/a目录移动到/b下,并重命名为cmv/a/b/c例子:ubuntu@ubuntu:~/Public/a2$tree….

    2022年11月2日
  • Springboot上传文件到Linux服务器

    Springboot上传文件到Linux服务器jar打包方式不支持将文件动态写入文件,这时需要通过映射的方式将文件上传到映射某一个文件夹,通过映射获取文件,在页面显示。1.yml配置配置本地上传地址或者服务器地址,springboot项目可以通过映射获取文件,从而页面显示 注意:这里配置的地址一定要加一个”/”在最后面!!!!file:#服务器地址uploadurl:”/u01/upload/images/”#本地地址#localurl:”D:/springbootFile/upload/images/”

    2022年5月18日
  • 安卓版本命名规则_什么是版本号

    安卓版本命名规则_什么是版本号手机软件完全的版本号定义规则:分三项:..,如1.0.0。修改规则:主版本号:功能模块有大的变动,比如增加多个模块或者整体架构发生变化。次版本号:和主版本相对而言,次版本号的升级对应的只是局部的变动。但该局部的变动造成了程序和以前版本不能兼容,或者对该程序以前的协作关系产生了破坏,或者是功能上有大的改进或增强。修订版本号:局部的变动,主要是局部函数的功能改进,或者bug的修正,或者功能的扩充。w…

    2022年9月11日
  • 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」

    【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」volatile一定能保证线程安全吗?禁止指令重排序volatile禁止指令重排序的原理。JMM就是Java内存模型(javamemorymodel)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到……………

    2022年9月5日
  • eclipse中svn插件的安装与使用「建议收藏」

    eclipse中svn插件的安装与使用「建议收藏」来源:https://www.cnblogs.com/zdfjf/p/5038155.html转自博客园:http://www.cnblogs.com/duanxz/p/3334660.html一.    eclipse中svn插件的安装InstallSubclipseinEclipse3.X(参考官网http://subclipse.tigris.org/)

    2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号