网站搭建中114514正规的代加工平台

张小明 2026/1/19 20:43:28
网站搭建中114514,正规的代加工平台,跨境电商网站如何做推广方案,学网站开发技术前言IO 是计算机体系中重要的一部分 。不同的 IO 设备有着不同的特点#xff1a;数据率不一样、传送单位不一样#xff0c;数据表示不一样#xff0c;等等。所以#xff0c;很难实现一种统一的输入输出方法。IO 有两种操作#xff0c;同步 IO 和异步 IO。同步 IO 指的是数据率不一样、传送单位不一样数据表示不一样等等。所以很难实现一种统一的输入输出方法。IO 有两种操作同步 IO 和异步 IO。同步 IO 指的是必须等待 IO 操作完成后控制权才返回给用户进程。异步 IO 是无须等待 IO 操作完成就将控制权返回给用户进程。上面就是一个典型的阻塞 IO对方还没有准备好回啥发送只能等着知道对方想好回复语再进行回复。下面学习一下常见的 4 种 IO 模型。阻塞 IO 模型在Linux 默认情况下所有的 socket 都是阻塞的一个典型的读操作流程如图所示。阻塞和非阻塞的概念描述的是用户线程调用内核 IO 操作的方式阻塞是指 IO 操作需要彻底完成后才返回到用户空间而非阻塞是指 IO 操作被调用后立即返回给用户一个状态值不需要等到 IO 操作彻底完成。当应用进程调用了 recvfrom 这个系统调用后系统内核就开始了 IO 的第一个阶段 准备数据。对于网络 IO 来说很多时候数据在一开始还没到达时系统内核就要等待足够的数据到来。而在用户进程这边整个进程会被阻塞。当系统内核一直等到数据准备好了它就会将数据从系统内核中拷贝到用户内存中然后系统内核返回结果用户进程才解除阻塞的状态重新运行起来。所以阻塞 IO 模型的特点就是IO 执行的两个阶段都被阻塞了。大部分的 socke 接口都是阻塞型的。所谓阻塞型接口是指系统调用时却不返回调用结果并让当前线程一直处于阻塞状态只有当该系统调用获得结果或者超时出错时才返回结果。实际上除非特别指定几乎所有的 IO 接口都阻塞型的。这给网络编程带来了一个很大的问题如在调用 send 的同时线程处于阻塞状态则在此期间线程将无法执行任何运算或响应任何网络请求。非阻塞 IO 模型在Linux 下可以通过设置 socket IO 变为非阻塞状态。当一个非阻塞的 socket执行 read 操作时流程如图当用户进程发出 read 操作时如果内核中的数据还没有准备好那么它并不会 block 用户进程而是立刻返回一个错误。从用户进程角度讲它发起 read 操作后并不需要等待而是马上就得到了一个结果 当用户进程判断结果是一个错误时它就知道数据还没有准备好于是它可以再次发送 read 操作。一旦内核中的数据准备好了并且又再次收到了用户进程的系统调用那么它马上就将数据复制到了用户内存中然后返回正确的返回值。所以在非阻塞式 IO 中用户进程其实需要不断地主动询问 kernel 数据是否准备好。非阻塞的接口相比于阻塞型接口的显著差异在于被调用之后立即返回使用如下的函数可以将某句柄归设为非阻塞状态fcntl( fd , F_SETFL , O_NONBLOCK);在非阻塞状态下recv 接口在被调用后立即返回返回值代表了不同的含义如下所述。recv 返回值大于 0表示接收数据完毕返回值即是接收到的字节数。recv 返回 0表示连接已经正常断开。recv 返回 -1 且 errno 等于 EAGAIN 表示 recv 操作还没执行完成。recv 返回 -1且 errno 不等于 EAGAIN 表示 recv 操作遇到系统错误 errno。可以看到服务器线程可以通过循环调用 recv 接口可以在单个线程内实现对所有连接的数据接收。但是上述模型绝不被推荐因为循环调用 recv 将大幅度占用 CPU 使用率。此外在这个方案 recv 更多的是起到检测“操作是否完成”的作用实际操作系统提供了更为高效的检测“操作是否完成”作用的接口例如 select 多路复用模式可以次检测多个连接是存活跃。多路 IO 复用模型多路 IO 复用有时也称为事件驱动 IO。它的基本原理就是有个函数会不断地轮询所负责的所有 socket 当某个 socket 有数据到达了就通知用户进程。IO 复用模型的流程如图当用户进程调用了 select 那么整个进程会被阻塞而同时内核会监视 所有 select 负责的 socket当任何一个 socket 中的数据准备好了 select 就会返回。这个时候用户进程再调用 read 操作将数据从内核拷贝到用户进程。这个模型和阻塞 IO 的模型其实并没有太大的不同事实上还更差一些 因为这里需要使用两个系统调用而阻塞 IO 只调用了一个系统调用 recvfrom用select 的优势在于它可以同时处理多个连接。如果处理的连接数不是很高的话使用 select/epoll Web server 定比使用多线程的阻塞 IO Web server 性能更好可能延迟还更大select/poll 的优势并不是对于单个连接能处理得更快而是在于能处理更多的连接。异步 IO 模型上面是异步 IO 模型。用户进程发起 read 操作之后立刻就可以开始去做其他的事而另一方面从内核的角度当它收到一个异步的 read 请求操作之后首先会立刻返回所以不会对用户进程产生任何阻塞。然后内核会等待数据准备完成然后将数据拷贝到用户内存中当这一切都完成之后内核会给用户进程发送一个信号返回 read 操作已完成的信息。调用阻塞 IO 一直阻塞住对应的进程直到操作完成而非阻塞 IO 在内核还在准备数据的情况下会立刻返回。两者的区别就在于同步 IO 进行 IO 操作时会阻塞进程。非阻塞 IO 在执行 recvfrom 这个系统调用的时候如果内核的数据没有准备好这时候不会阻塞进程。但是当内核中数据准备好时recvfrom 会将数据从内核拷贝到用户内存中这个时候进程则被阻塞。而异步 IO 则不 样当进程发起 IO 操作之后就直接返回直到内核发送一个信号告诉进程 IO 已完成则在这整个过程中进程完全没有被阻塞。絮叨经过上面的学习你会发现非阻塞 IO 和异步 IO 的区别还是很明显的。在非阻塞 IO 中虽然进程大部分时间都不会被阻塞但是它仍然要求进程去主动检查并且当数据准备完成以后也需要进程主动地再次调用 recvfrom 来将数据拷贝到用户内存中。而异步IO 则完全不同它就像是用户进程将整个 IO 操作交给了内核完成然后内核做完后发信号通知。IO 作为计算机的基础知识后台开发务必要掌握。更多网络编程相关的知识可以去学习 unix 网络编程祝大家学习愉快
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

成都网站优化方法微网站定制开发

一、const 指针:为什么是 C 语言的 “安全神器”?在 C 语言的内存操作中,“误修改” 是最常见的踩坑根源 —— 比如不小心改写常量字符串、意外篡改函数传入的只读数据。而const与指针的组合,就像给内存加了一把 “智能安全锁”&…

张小明 2026/1/17 23:13:35 网站建设

企业网站开发汇报seo外链网站源码

与ld.so (以 Alpine 为例)背景:Alpine Linux 是一个基于 musl libc 和 busybox 构建的轻量级 Linux 发行版,专注于安全性、资源效率和简洁性。它被广泛用于 Docker 容器、嵌入式系统和云计算环境。基本概念:gcc 和 ld.…

张小明 2026/1/17 23:13:36 网站建设

芜湖服装网站建设wordpress 禁用谷歌

Excalidraw镜像优化内存管理,降低GPU消耗 在现代远程协作场景中,虚拟白板已成为团队沟通不可或缺的工具。当工程师讨论架构、产品经理绘制原型,或是设计师进行头脑风暴时,Excalidraw 凭借其手绘风格与极简交互脱颖而出。更进一步地…

张小明 2026/1/17 23:13:37 网站建设

新都兴城建设投资有限公司网站甘肃网站建设哪家便宜

VoxCPM-1.5-TTS模型镜像部署常见问题与解决方案汇总 在当前AI语音技术快速普及的背景下,高质量、低门槛的文本转语音(TTS)系统正成为智能客服、有声内容创作、虚拟人交互等场景的核心基础设施。VoxCPM-1.5-TTS作为一款面向中文场景优化的大规…

张小明 2026/1/17 23:13:36 网站建设

大型外包软件公司有哪些seo范畴有哪些

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个网络架构原型验证工具,基于Packet Tracer实现:1. 常见网络拓扑模板库 2. 配置导入/导出功能 3. AI辅助设计建议 4. 自动化测试脚本 5. 性能分析报告…

张小明 2026/1/17 23:13:38 网站建设