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更加简单;

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Drool(转)[通俗易懂]

    Drool(转)[通俗易懂]什么是Drools(译者增加:什么是Drools,摘自drools.org)Drools是一个基于CharlesForgy’s的Rete算法的,专为Java语言所设计的规则引擎。Rete算法应用于面向对象的接口将使基于商业对象的商业规则的表达更为自然。Drools是用Java写的,但能同时运行在Java和.Net上。DroolsDrools被设计为可插入式的语言实现。目前规则能用…

    2022年10月28日
  • 十六、状态模式—用类表示状态 #和设计模式一起旅行#

    人有悲欢离合,月有阴晴圆缺!故事背景白天、黑夜是不同的状态,水蒸气、冰是水不同的状态,大千的世界,不同的各种东西会有很多种状态,本篇要介绍的就是 “用类来表示状态”,用类表示状态后,我们就可以切换类来方便地改变对象的状态。故事主角状态模式:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。在状态模式结构中包括几个角色: – Conte…

  • EmguCv模板匹配[通俗易懂]

    模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。先贴上简陋的界面图  代码:Matsrc=newImage<Bgr,byte>(ib_o…

  • 基于Chrome浏览器的HackBar_v2.2.6插件的安装与注册「建议收藏」

    基于Chrome浏览器的HackBar_v2.2.6插件的安装与注册「建议收藏」Hackbar是一款基于浏览器的简单的安全审计或者说是渗透测试工具,能够帮助您测试sql注入,XSS漏洞和站点安全性,帮助开发人员对其代码进行安全审计。本篇博客介绍的是基于Chrome浏览器的hackbar插件的安装与注册,在Firebox浏览器与Chrome浏览器上的安装类似,对在firebox的安装本篇博客不再做说明。 HackBar_v2.2.6下载和安装 1、打开Chrome…

  • python常见的数据类型有哪些?

    python常见的数据类型有哪些?变量用来存储数据,那么大家有没有想过,我们应该让变量占用多大空间,保存什么样的数据呢?在讲解变量的类型之前,我们先来看一个生活中的例子,例如,我们要运送一台电脑,大卡车和小轿车都可以完成,但是,如果使用大卡车运送一台电脑,显然有点小题大做,浪费了大卡车的空间,如图1所示。图一:卡车和轿车运输一台电脑同理,如果使用变量存储数据时,为了更充分利用内存空间,我们可以为变量指定不同的数据类型。Python中常见的数据类型如图2所示图二:Python变量数据类型图二中罗列了Python中常见的数据类型,下

  • rsyslog日志服务器_php日志系统

    rsyslog日志服务器_php日志系统特性介绍:http://www.rsyslog.com/features/下载: http://www.rsyslog.com/download/本文内容来源于:http://blog.csdn.net/xiangliangyu2008/article/details/8102064===========================

发表回复

您的电子邮箱地址不会被公开。

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