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

有哪些做婚礼平面设计的网站有哪些成都品牌推广

有哪些做婚礼平面设计的网站有哪些,成都品牌推广,厦门网站搭建,在wordpress加入文件管理器前言 在前面的学习中,有一个问题一直没有展开来说,即 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/wzjs/344582.html

相关文章:

  • 做营销型网站 公司怎么建立一个属于自己的网站
  • 网站建设九步走百度关键词推广可以自己做吗
  • 如何做网站连接seo网络优化师
  • 装修网十大平台长沙网站seo收费
  • 业务网站在线生成推广文案
  • 免费开源企业网站手机自动排名次的软件
  • 中山高端网站建设价格如何交换友情链接
  • tp5网站开发逻辑架构新浪微指数
  • 软件开发合同模板免费seo自动优化软件安卓
  • wordpress 建立相冊深圳百度推广优化
  • 网站怎么做六个页面企业查询免费
  • 个人网站备案名称 技巧网站seo优化方案策划书
  • aps网站服务建设利尔化学股票
  • 网上接单干活的平台伟哥seo博客
  • wordpress 动态网站模板今日头条指数查询
  • 如何做班级网站国家免费技能培训
  • 网站开发心得体会网址大全123
  • 湖州住房和城乡建设厅网站推广技巧
  • 电子商务网站建设对毕业设计百度推广管理平台登录
  • 洗化行业做网站网络广告策划流程有哪些?
  • 做响应式网站设计图是多大的企业网站建设平台
  • div css网站边框模板杭州排名优化公司
  • 作品集的个人网站怎么做汕头百度网站排名
  • 做PPT参考图片网站 知乎最近新闻大事
  • 自动采集网站php源码自动点击关键词软件
  • 互联网推广模式有哪些城市分站seo
  • 网站找谁做什么是seo如何进行seo
  • 北京南站官网星沙网站优化seo
  • 网站建设 职责西安高端网站建设公司
  • 定制系统手机优化大师怎么退款