当前位置: 首页 > news >正文

asp网站设计代做关键词推广效果分析

asp网站设计代做,关键词推广效果分析,做塑料的网站,nginx网站开发前言 在前面的学习中,有一个问题一直没有展开来说,即 IO 问题。 IO 到底有多少种方式呢?什么是高效的 IO 呢? IO 本质上就是 INPUT 和 OUTPUT 。在网络中 INPUT 就是从网卡中获取数据,而 OUTPUT 就是向网卡中发送数据…

前言

在前面的学习中,有一个问题一直没有展开来说,即 IO 问题。 IO 到底有多少种方式呢?什么是高效的 IO 呢?

IO 本质上就是 INPUT 和 OUTPUT 。在网络中 INPUT 就是从网卡中获取数据,而 OUTPUT 就是向网卡中发送数据。 IO 可以理解为等+拷贝。当 IO 事件就绪时就可以进行拷贝了,所以所谓的高效的 IO 就是让 IO 大部分时间处于拷贝而减少等待的时间。

那么如何高效的IO呢?这就提出了五种IO模型来提高 IO 效率。

1. 五种 IO 模型概述

阻塞 IO

阻塞 IO 即在内核将数据准备好之前,系统调用会一直等待。所有的套接字默认都是阻塞方式。阻塞 IO 是最常见的 IO 方式。

非阻塞 IO

非阻塞 IO 即在内核还未将数据准备好时,系统调用仍然会直接返回,并且返回 EWOULDBLOCK 错误码。

信号驱动 IO

信号驱动 IO 即当内核将数据准备好的时,会使用 SIGIO 信号通知应用程序进行 IO 操作。

多路转接 IO

虽然从流程图上看起来和阻塞 IO 类似,但实际上最核心在于 IO 多路转接能够同时等待多个文件描述符的就绪状态。

异步 IO

异步 IO 即由内核在数据拷贝完成时,通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)。

针对上述 IO 方式我们进行分析:

1. 阻塞 IO vs 非阻塞 IO

IO = 等 + 拷贝。它们等的方式不同,但是 IO 效率实际上是相同的。平常所说的非阻塞 IO 的效率高是因为它可以在等的时候做其他的事情。

2. 这五种 IO 模型哪个效率最高

当然是多路转接 IO 了,因为它能接收到数据就绪的概率更大了。

3. 信号驱动 IO 特点是什么?效率如何?

它逆转了获取就绪事件的方式,效率同阻塞 IO 和非阻塞 IO 相同,因为它们只是等的方式不同而已。

4. 同步 IO vs 异步 IO

我们介绍的前四种 IO 方式是同步 IO。同步 IO 和异步 IO 的本质区别就是有没有参与 IO 的过程。

针对上述的五种 IO 模型,我们会具体介绍非阻塞 IO 和多路转接 IO ,其中本篇博客的下一部分介绍非阻塞 IO ,下一篇博客将具体介绍多路转接 IO 。

2. 非阻塞 IO

其实之前学习过的很多函数都可以通过设置标记位的方式来实现非阻塞,但是Linux下一切皆文件,故而就产生了更为通用的设置方式,即对文件描述符进行操作。

#include <fcntl.h>
int fcntl(int fd, int op, ... /* arg */ );// 参数: 
//     fd:需要被操作的文件描述符
//     op:要进行的设置操作
//        F_DUPFD: 复制一个现有的描述符
//        F_GETFD 或 F_SETFD:获得/设置文件描述符标记
//        F_GETFL 或 F_SETFL:获得/设置文件状态标记
//        F_GETOWN 或 F_SETOWN:获得/设置异步 I/O 所有权
//        F_GETLK 获 F_SETLK 或 F_SETLKW:获得/设置记录锁
// 返回值:
//    成功的话依赖于所请求的内容,失败的话返回 -1

非阻塞如果不输入,数据就不会就绪,并以出错的形式返回。但是 read 不是有读取错误吗,两者如何区分呢?

如果读取错误的话就会被设置错误码 errno ,里面会有更详细的错误信息,但是如果是底层数据没有就绪的话就会触发11号错误 EAGAIN(EWOULDBLOCK)。

补充知识:

read 的阻塞是调用系统调用而进入了浅层睡眠 s 状态,而 s 状态收到信号也可能会被叫醒的!这样的情况错误码就是 EINTR 。

接下来我们写一段demo代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cerrno>
#include <unistd.h>
#include <fcntl.h>void SetNonBlock(int fd)
{// 获取得到文件描述符int fl = fcntl(fd, F_GETFL);if (fl < 0){perror("fcntl");return;}// 将文件描述符的属性置为非阻塞fcntl(fd, F_SETFL, fl | O_NONBLOCK);
}int main()
{std::string tips = "Please Enter# ";char buffer[1024];SetNonBlock(0);while (true){write(0, tips.c_str(), tips.size());int n = read(0, buffer, sizeof(buffer));if (n > 0){buffer[n] = 0;std::cout << "echo# " << buffer << std::endl;}else if (n == 0){std::cout << "read file end!" << std::endl;break;}else{if (errno == EAGAIN || errno == EWOULDBLOCK){std::cout << "底层数据,没有就绪" << std::endl;sleep(1);continue;}else if (errno == EINTR){std::cout << "被中断,从新来" << std::endl;sleep(1);continue;}else{std::cout << "read error: " << n << ", errno: " << errno << std::endl;}}}
}
http://www.dtcms.com/a/449970.html

相关文章:

  • HTTP基础教程详解
  • 电子商务网站主要面向上海设计网站开发
  • 网站开发一般用哪个浏览器广州生物科技网站建设公司
  • 禹州市门户网站建设做网站开发一般用什么语言
  • 做非经营网站需要营业执照电商网站开发实战视频教程
  • 咸阳企业网站建设好看的免费网站模板下载 迅雷下载地址
  • LOD and Reflections Adding Details
  • 创建一个网站多少钱中山专业外贸网站建设
  • InnoDB强制恢复实战:紧急抢救数据指南
  • MATLAB计算日尺度旱涝急转指数(Dry-wet abrupt alternation index,DWAAI)
  • 公司购买网站怎么做分录石家庄网站建设流程
  • 04三个概念:时间序列、采样、告警
  • 第14节-增强表结构-Dropping-columns
  • 中山网站建设的价格wordpress 婚庆主题
  • LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】
  • joomla适合做什么网站弹性云主机做网站
  • 7.内置函数
  • 【深入理解计算机网络05】数据链路层:组帧,差错控制,流量控制与可靠传输
  • 夜神模拟器安装burp证书实现微信小程序抓包
  • 交互设计 网站推荐清美未来广告设计公司
  • 叮当快药网站谁做的网站改版 升级的目的
  • 佛山免费网站设计阿里云搭建wordpress
  • 大模型之用LLaMA-Factory微调Deepseek-r1-8b模型实践
  • 【C语言】寻找数组中唯一不重复的元素
  • 大数据成矿预测系列(三) | 从统计模型到机器学习:为何机器学习是成矿预测的新前沿?
  • UNIX下C语言编程与实践34-UNIX 守护进程:概念、特点与应用场景
  • 专项行业项目资源与源码
  • 《基于电阻抗断层成像的实时软触觉传感器中的深度神经网络方法》IROS2019论文解读
  • 网页设计第5次作业
  • 吃透大数据算法-霍夫曼编码(Huffman Coding)