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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • synchronized偏向锁和轻量级锁_java轻量级锁,偏向锁,重量级锁

    synchronized偏向锁和轻量级锁_java轻量级锁,偏向锁,重量级锁今天简单了解了一下java轻量级锁和重量级锁以及偏向锁。看了看这篇文章觉得写的不错原文链接java 偏向锁、轻量级锁及重量级锁synchronized原理Java对象头与Monitorjava对象头是实现synchronized的锁对象的基础,synchronized使用的锁对象是存储在Java对象头里的。对象头包含两部分:Mark Word 和 Class Metadata Address其中Mark Word在默认情况下存储着对象的HashCode、分代年龄、锁标记位等以下是32位JVM的

    2022年8月8日
    5
  • 断开和服务器共享连接的方法「建议收藏」

    断开和服务器共享连接的方法「建议收藏」断开和服务器共享连接的方法

    2022年4月25日
    339
  • Win 10 专业版重新激活详细操作步骤

    Win 10 专业版重新激活详细操作步骤百度经验:jingyan.baidu.com最近电脑的win10系统显示显示未激活,需要激活,用命令提示符运行slmgr.vbs-xpr查询到期状态显示处于统治状态KMS10方法/步骤1,首先,找到计算机,右键点击属性,确认你的电脑系统是否是windows10专业版(由于小编安装的是windows10专业版,所以今天就说win10专业版的激活方式),如下图所示。2,如果有朋友找不…

    2022年5月29日
    41
  • python——正则表达式(re模块)详解

    python——正则表达式(re模块)详解在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。正则表达式的大致匹配过程是:1.依次拿出表达式和文本中的字符比较,2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。3.如果表达式中有量词或边界,这个过程会稍微有一些不同。r:在带有’r’前缀的字符串字面值中,反斜杠不必做任何特殊处理。因此r”\n”表示包含’\’和’n’两个字符的字符串,而”\n”则表示只包含一个换行符的字符串。re模块的

    2022年5月17日
    51
  • executenonquery报错_sql2008和mysql

    executenonquery报错_sql2008和mysqlExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作,其方法返回值意义:对于Update,Insert,Delete语句执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据…

    2025年10月30日
    2
  • 在linux中使用md5校验文件的完整性

    在linux中使用md5校验文件的完整性

    2021年8月22日
    64

发表回复

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

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