`

windows网络模型学习--WINDOWS和LINUX开发模型比较

阅读更多
windows网络模型学习--WINDOWS和LINUX开发模型比较

以前在做LINUX网络开发时把用户层和系统的内核看成两个层面,看简单点就是用户层才能最简单,高效的取到数据;而内核层就是个终端的对象,可以从终端的被动转向主动。

那么在进行网络I/O操作时有这么几种套路来传递数据:
1。普通的recv,send.首先是用户亲自调用函数进到内核I/O空间查看是否有数据,根据是否有数据做出不同的选择。比如有数据则取回,无数据则等待(阻塞模式下)。这是最原始,也是最理想的取数据状态。在单纯的数据连续传递,并且没有多并发情况下算是很高效的。如果没有什么交互或者高连接要求,用这种普通的写法即可。

2。普通套接字的阻塞和非阻塞时间上的判断要不是有数据,要不就立即返回。有时候需要交互的情况,一些缓冲时间,并且可以对多个套接字的控制。就出现了select/poll.即,在我们调用select时,在指定的时间内,内核会告诉我们是否可读取。

3。select的缺陷就是在套接字多的时候,并且不是每个套接字都在活动状态,耗费在了轮询问的状态上。新的改进即,在有数据时,让内核来通知用户层可以读取了。

4。针对第三的变种有:除了信号通知,还可以为内核直接提供存储空间,顺手把数据给装上;或者再变种点,再挂个回调函数,连收到数据处理后的事也一起干完。

针对第4点,LINUX好象没有分开提供这种变种模式,而是直接把回调的这种模式放在EPOLL里实现了。而WINDOWS则分别提供(linux有没提供可能这里我说得不是特别对)

针对这些模式,来看看WINDOWS

参考帖子:
http://topic.csdn.net/u/20080702/20/43466EA1-0F44-4B07-ACFD-7431A1969C20.html

一:select模型
二:WSAAsyncSelect模型  跟第3点类似,但是在量多的时候内核就很繁忙了。
三:WSAEventSelect模型  在第3点上加以改进,为每个套接字都增加一个线程处理。
四:Overlapped I/O 事件通知模型 相对第4点的变种,顺手把数据给装上。
五:Overlapped I/O 完成例程模型 相对第4点变种,不但数据装上,连函数一起调用了。
六:IOCP模型


讨论到这里,所说的端口模型几乎可以解决所有的I/O状况。比如连接量多和少,数据量的频繁。但是第5点的策略是对每个连接分别建个线程进行处理。一种极端的情况可以这样预料,假设有几万个用户,并且其中活跃数不多。那么就有两个问题需要考虑:这些线程的切换效率?活跃用户的轮询时的命中率?

于是就有了最终模型(从目前来看)Windows:IOCP--Linux:EPOLL

如果事先开好N个线程,让它们在那hold[堵塞],然后可以将所有用户的请求都投递到一个消息队列中去。然后那N个线程逐一从消息队列中去取出消息并加以处理。就可以避免针对每一个用户请求都开线程。不仅减少了线程的资源,也提高了线程的利用率。理论上很不错,你想我等泛泛之辈都能想出来的问题,Microsoft又怎会没有考虑到呢?"-----摘自nonocast的《理解I/O Completion Port》
3
1
分享到:
评论

相关推荐

    野狗优化算法DOA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用

    野狗优化算法DOA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用

    2107381120 王孟丽 实验2 (1).docx

    2107381120 王孟丽 实验2 (1).docx

    JavaScript_其他Meta JS项目使用的工具库集合.zip

    JavaScript

    asm-4.2.jar

    asm.jar的作用: 提到asm.jar的作用,那么最显著的莫过于计算机显示Android手机屏幕了;其次可以调整计算机上显示Android手机屏幕的大小。ASM 是一个Java字节码操纵框架。它可以直接以二进制形式动态地生成 stub 类或其他代理类,或者在装载时动态地修改类。ASM 提供类似于 BCEL 和 SERP 之类的工具包

    node-v14.17.6-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_GitHub上的类固醇.zip

    JavaScript

    JavaScript_Brian Holt在Frontend Masters上讲授的完整React入门.zip

    JavaScript

    node-v18.19.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    汇编语言实现三款数字电压表

    智能控制-AD0832数字电压表1602液晶程序(汇编语言).zip 智能控制-AD0832数字电压表LED灯实验程序(汇编语言).zip 智能控制-AD0832数字电压表数码管实验程序(汇编语言).zip

    基于STM8S单片机PWM口编程输出不同频率的方波来驱动蜂鸣器鸣响音乐旋律软件源码.zip

    基于STM8S单片机PWM口编程输出不同频率的方波来驱动蜂鸣器鸣响音乐旋律软件源码 int main(void) { //MCU初始化 Driver_MCU_Init(); //播放指针初始化 Voice_pVD = NULL; //开启定时中断 Driver_Time10msON(); Driver_OpenEA(); //run.. while(True); }

    node-v16.11.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_通过在一个有趣的模拟项目中贡献代码来学习GitHub工作流程.zip

    JavaScript

    JavaScript_将数据保护放在首位的通信平台.zip

    JavaScript

    JavaScript_基于承诺的HTTP客户端,用于浏览器和nodejs.zip

    JavaScript

    node-v17.4.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v5.10.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_把这该死的新信号换成旧的.zip

    JavaScript

    JavaScript_刺激控制器的可组合行为集合.zip

    JavaScript

    基于Best Dimension Search分类Cytokine蛋白质之Web Server.zip

    基于Best Dimension Search分类Cytokine蛋白质之Web Server蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

    JavaScript_交互式代码示例的文档教育和乐趣.zip

    JavaScript

Global site tag (gtag.js) - Google Analytics