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

网站开发 简历项目经历找网页设计公司

网站开发 简历项目经历,找网页设计公司,如何注册公司名称,做网站的五要素高级IO模型 一、 理解 IO二、认识五种高级 IO 模型1. 阻塞 IO2. 非阻塞IO3. 信号驱动 IO4. IO 多路转接5. 异步 IO 三、高级 IO 重要概念1. 阻塞和非阻塞2. 同步通信和异步通信 四、非阻塞 IOfcntl 一、 理解 IO 当我们调用系统接口 write、read 的时候#xff0c;本质是把数… 高级IO模型 一、 理解 IO二、认识五种高级 IO 模型1. 阻塞 IO2. 非阻塞IO3. 信号驱动 IO4. IO 多路转接5. 异步 IO 三、高级 IO 重要概念1. 阻塞和非阻塞2. 同步通信和异步通信 四、非阻塞 IOfcntl 一、 理解 IO 当我们调用系统接口 write、read 的时候本质是把数据从用户层写给操作系统也就是写入到 OS 的发送缓冲区中或者从 OS 的接收缓冲区中读取数据所以它们的本质也就是拷贝函数。 那么在这个过程中调用 write 的时候只有当发送缓冲区中有足够的空间才能进行拷贝当发送缓冲区没有空间了此时 write 只能阻塞等待不能继续拷贝。而调用 read 的时候只有当接收缓冲区有数据才能进行读取拷贝当接收缓冲区没有数据了此时 read 也只能阻塞等待。上面就是 IO 的过程所以IO 的过程被分为两个部分等待和拷贝 所以在 IO 的过程中要进行拷贝必须先判断条件成立也就是读写事件是否就绪。那么什么叫做高效的 IO 呢就是在单位时间内IO 过程中等的比重越小IO 的效率越高 二、认识五种高级 IO 模型 1. 阻塞 IO 在内核将数据准备好之前系统调用会一直等待。所有的套接字默认都是阻塞方式。 阻塞IO是最常见的IO模型过程如下 2. 非阻塞IO 非阻塞 IO 就是如果内核还未将数据准备好系统调用仍然会直接返回并且返回 EWOULDBLOCK 错误码。 非阻塞 IO 往往需要程序员循环的方式反复尝试读写文件描述符这个过程称为轮询。这对 CPU 来说是较大的浪费一般只有特定场景下才使用。 3. 信号驱动 IO 内核将数据准备好的时候使用 SIGIO 信号通知应用程序进行 IO 操作。 4. IO 多路转接 IO 多路转接虽然从流程图上看起来和阻塞 IO 类似实际上最核心在于 IO 多路转接能够同时等待多个文件描述符的就绪状态。 5. 异步 IO 由内核在数据拷贝完成时通知应用程序。和信号驱动 IO 的区别在于信号驱动是告诉应用程序何时可以开始拷贝数据。 以上就是五种高级 IO 的模型的简单介绍。任何 IO 过程中都包含两个步骤第一是等待第二是拷贝。而且在实际的应用场景中等待消耗的时间往往都远远高于拷贝的时间。想要让 IO 更高效最核心的办法就是让等待的时间尽量少。 三、高级 IO 重要概念 1. 阻塞和非阻塞 阻塞和非阻塞关注的是程序在等待调用结果消息返回值时的状态。 阻塞调用是指调用结果返回之前当前线程会被挂起。调用线程只有在得到结果之后才会返回非阻塞调用指在不能立刻得到结果之前该调用不会阻塞当前线程 其实阻塞IO和非阻塞IO的效率是差不多的因为 IO 等待拷贝数据好了大家都要拷贝只是非阻塞IO在等待的时候可以做其他事情也就是它们之间等的方式不一样非阻塞IO在进行非阻塞轮询时可以做自己其它的事情所以这就导致非阻塞IO在效率上稍微高一点。 2. 同步通信和异步通信 同步和异步关注的是消息通信机制。 所谓同步IO就是在发出一个调用时在没有得到结果之前该调用就不返回。但是一旦调用返回就得到返回值了换句话说就是由调用者主动等待这个调用的结果。也就是参与了IO中的等待或者拷贝的过程就是同步IO异步IO则是相反调用在发出之后这个调用就直接返回了所以没有返回结果换句话说当一个异步过程调用发出后调用者不会立刻得到结果而是在调用发出后被调用者通过状态、通知来通知调用者或通过回调函数处理这个调用。也就是说异步IO不参与IO只是发起IO最后拿结果就行。 四、非阻塞 IO fcntl 我们以前学过 recv() 这样的接口其中它的参数如下 我们知道前三个参数是和 read() 的一模一样而最后一个参数 flag 设为 0 默认就是阻塞等待。而我们可以将这个参数设为 MSG_DONTWAIT就是非阻塞IO如下 但是这种选项用起来不方便更通用的做法是使用 fcntl() 接口。我们知道文件描述符就是一个数组下标而我们所有的网络通信、文件等等都是读写文件描述符而每一个文件描述符指向的都是内核中的文件对象文件对象是有关于这个文件的 flags 的也就是它的标记位。所以我们可以通过 fcntl() 接口来直接设置一个文件描述符的属性其实就是设置其文件对象中的 flags 标志位告诉内核这个指定的文件描述符要以非阻塞的方式来操作。系统接口如下 如上可以按照指定的 cmd 来对指定的文件描述符来进行可变参数部分的设置。 传入的 cmd 的值不同后面追加的参数也不相同。fcntl 函数有5种功能 复制一个现有的描述符cmdF_DUPFD获得/设置文件描述符标记cmdF_GETFD 或 F_SETFD获得/设置文件状态标记cmdF_GETFL 或 F_SETFL获得/设置异步 I/O 所有权cmdF_GETOWN 或 F_SETOWN获得/设置记录锁cmdF_GETLKF_SETLK 或 F_SETLKW 我们尝试将标准输入设置为非阻塞IO的形式如下代码 void SetNonBlock(int fd){// 获取文件状态标记位int fl fcntl(fd, F_GETFL);if(fl 0){perror(fcntl);return;}// 对获取到的文件状态标记位追加属性标记位fcntl(fd, F_SETFL, fl | O_NONBLOCK);cout set fd nonblock done endl;}int main(){char buffer[1024];// 设置标准输入为非阻塞IOSetNonBlock(0);while(true){cout Please Enter# ;ssize_t n read(0, buffer, sizeof(buffer) - 1);if(n 0){buffer[n - 1] 0;cout echo: buffer endl;}else if(n 0){cout read done endl;break;}else{cerr read error, n n , errno code: errno , errstr: strerror(errno) endl;break;}}return 0;}上面的代码其实是跑不通的因为我们根本没有输入数据因此 n 是小于0的我们可以通过打印错误信息观察 我们可以看到错误码的描述大概意思就是临时资源不可用因为我们在 else 中 break 了我们应该把 break 去掉改为 sleep(1)我们方便观察。 此时运行后我们在键盘上输入是可以直接回显的如下 所以设置为非阻塞如果底层 fd 数据没有就绪recv/read/write/send返回值会以出错的形式返回。所以出错就分为两种情况了一种是真的出错了另一种是底层没有就绪这种情况就是返回 11 号错误码也就是 EWOULDBLOCK. 那么我们怎么区分呢可以通过 errno 区分如果 errno 为 11代表底层没就绪所以我们对代码稍作修改如下 void SetNonBlock(int fd){// 获取文件状态标记位int fl fcntl(fd, F_GETFL);if(fl 0){perror(fcntl);return;}// 对获取到的文件状态标记位追加属性标记位fcntl(fd, F_SETFL, fl | O_NONBLOCK);cout set fd nonblock done endl;}int main(){char buffer[1024];// 设置标准输入为非阻塞IOSetNonBlock(0);while(true){// cout Please Enter# ;ssize_t n read(0, buffer, sizeof(buffer) - 1);if(n 0){buffer[n - 1] 0;cout echo: buffer endl;}else if(n 0){cout read done endl;break;}else{if(errno EWOULDBLOCK){// do other thing...}else{cerr read error endl;break;}//cerr read error, n n , errno code: errno , errstr: strerror(errno) endl;sleep(1);}}return 0;}
http://www.hkea.cn/news/14256355/

相关文章:

  • 网站的优化排名怎么做什么叫定制网站
  • 网站的模块怎么做网站建设与管理案例柳洪轶
  • 不良网站正能量进入窗口网站开发项目源码
  • 网站维护一般多久企业网站模板建站怎么用
  • 网站开发做原型吗做瞹瞹瞹视频免费网站
  • 南昌建设厅网站数据网站建设哪家好
  • 做酒店经理的一些网站网站一年多少钱?
  • 怎样给网站增加栏目wordpress公司展示网站模板
  • 网站建设项目设计表网站已有备案了 现在换空间商还用备案么
  • 网站 引导页 设计php网站微信登录怎么做
  • 做外账经常进哪几个网站东莞教育团购网站建设
  • h5页面制作网站免费拼多多搜索关键词排名
  • 网站建设公司哪里好网站上做地图手机上显示不出来的
  • 网站建设的技巧有哪些方面做画册的国外网站
  • 郑州做网站最好的公司5条国内最新新闻
  • 网站登录慢眼镜网站怎么做竞价
  • 高端网站建设与发展打开app登录
  • 网站运营的目的及意义龙华公司
  • 网站建设计划书模板百度区域代理
  • 公司网站必须做可信认证吗开发一个app要多少钱呢
  • dede网站 地图什么做做图素材网站 千
  • app公司网站建设桂林漓江景区
  • 网站建设需要学ps吗大连招标信息网
  • 上海网站建设价深圳机械网站建设
  • 如何建设一个好的企业网站涉县移动网站建设
  • react 做网站保健品网站源代码
  • gateface能用来做网站吗做专业网站设计多少钱
  • 广宁县住房建设局网站免费企业信息发布平台
  • 天津建设项目招投标网站做网站需要那些技术
  • 网站详情页怎么做微信公众号分销功能