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

网站备案后 如何建设随州哪里有网络推广方案

网站备案后 如何建设,随州哪里有网络推广方案,大学生做简历的网站,如何 在网站上面做推广文章目录 目录 文章目录 一、五种IO模型 1.阻塞IO: 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 二、高级IO的一些重要概念 1.同步通信和异步通信 2.阻塞和非阻塞 三、其他高级IO 四、非阻塞IO 1.fctl函数 2.实现setNoBlock函数#xff0c;将文件描述符设置… 文章目录 目录 文章目录 一、五种IO模型 1.阻塞IO: 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 二、高级IO的一些重要概念 1.同步通信和异步通信 2.阻塞和非阻塞 三、其他高级IO 四、非阻塞IO 1.fctl函数 2.实现setNoBlock函数将文件描述符设置为非阻塞 3.轮询方式读取标准输入 五、IO多路转接之select 1.初始select 2.select函数原型 3.理解select执行过程 4.select的特点 5.select的缺点 6.select使用示例检测标准输入输出 7.select使用实例 六、IO多路转接之poll 1.poll函数接口 2.参数说明 3.返回结果 4.poll的优点 5.poll的缺点 6.poll使用实例使用poll监控标准输入 总结 一、五种IO模型 1.阻塞IO: 在内核将数据准备好之前系统调用会一直等待。所有的套接字默认都是阻塞方式。阻塞是最常见的IO模型。 2.非阻塞IO 如果内核还未将数据准备好系统调用仍然会直接返回并返回EWOULDBLOCK错误码。非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符这个过程称为轮询。这对cpu来说是较大的浪费一般只有特定的场景下才使用。 3.信号驱动IO 内核将数据准备好的时候使用SIGIO信号通知应用程序进行IO操作 4.IO多路转接 虽然从图上看和阻塞IO类似实际上最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态。 5.异步IO 由内核在数据拷贝完成时通知应用程序而信号驱动是告诉应用程序何时可以开始拷贝数据 在任何IO过程中都包含两个步骤第一是等待第二是拷贝。而且在实际的应用场景中等待消耗的时间往往都高于拷贝的时间让IO高效最核心的办法就是让等待的时间尽量减少。 二、高级IO的一些重要概念 1.同步通信和异步通信 同步和异步关注的是消息通信机制 同步就是在发出一个调用的时候在没有得到结果之前该调用就不返回。但是一旦调用返回就得到了返回值。换句话说就是由调用者主动等待这个调用的结果。异步则相反调用在发出后这个调用结果就直接返回所以没有返回结果。换句话说当一个异步调用发出后调用者不会立刻得到返回结果而是在调用发出后被调用者通过状态、通知来通知调用者或者通过回调函数处理这个调用。 在多进程多线程的时候也有提到同步和互斥。这里的是完全不同的概念。 进程/线程同步也是进程/线程之间直接的制约关系是为完成某种任务而建立的两个或多个线程这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系尤其是在访问临界资源的时候。 2.阻塞和非阻塞 阻塞和非阻塞关注的是等待调用结果消息返回值时的状态 阻塞调用的指调用结果返回之前当前线程会被挂起调用线程只有在得到结果之后才会返回。非阻塞调用是指在不能立刻得到结果之前该调用者不会阻塞当前线程。 三、其他高级IO 非阻塞io,纪录锁系统V流机制io多路转接io多路复用readv和writev函数以及存储映射IOMMAP)这些统称为高级IO 本文重点讨论IO多路转接 四、非阻塞IO 1.fctl函数 fcntl 一个文件描述符默认都是阻塞IO #includeunistd.h #includefcntl.hint fcntl(int fd,int cmd, .../*args */); 传入的cmd不同后面追加的参数也不同 fcntl函数有5种功能 复制一个现有的描述符(cmd F_DUPFD)获得/设置文件描述符标记cmd F_GETFD或F_SETFD)获得/设置文件状态标记cmd F_GETFL或F_SETFL)获得/设置异步io所有权cmd F_GETOWN或F_SETOWN)获得/设置记录锁cmd F_GETLK,F_SETLK或F_SETLKW) 此处使用第三个功能获取/设置文件状态标记就可以将一个文件描述符设置为非阻塞 2.实现setNoBlock函数将文件描述符设置为非阻塞 基于fcntl实现一个SetNoBlock函数 void SetNoBlock(int fd) {int fl fcntl(fd,F_GETFL);if(fl 0){perror(fcntl);return;}fcntl(fd,F_SETFL,fl|O_NONBLOCK); } 使用F_GETFL将当前的文件描述符的属性取出来(这是一个位图). 然后再使用F_SETFL将文件描述符设置回去. 设置回去的同时, 加上一个O_NONBLOCK参数. 3.轮询方式读取标准输入 #includestdio.h #includeunistd.h #includefcntl.hvoid SetNoBlock(int fd) {int fl fcntl(fd,F_GETFL);if(fl 0){perror(fcntl);return;}fcntl(fd,F_SETFL,fl|O_NONBLOCK); }int main() {SetNoBlock(0);while(1){char buf[1024] {0};ssize_t read_size read(0,buf,sizeof(buf)-1);if(read_size 0){sleep(1);continue;}printf(input:%s\n,buf);return 0; } 五、IO多路转接之select 1.初始select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个fd的状态变化的程序会停在select这里等待直到被监视的fd有一个或者多个发生了状态改变 2.select函数原型 #includesys/select.hint select(int nfds,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);//nfd 是需要监视的最大文件描述符值1 //rdset,wrset,exset分别对应需要检测的可读文件描述符的集合可写文件描述符的集合以及异常文件描述符的集合 //timeout为结构timeval,用来设置select的等待时间 参数timeout取值 NULL:则表示select()没有timeout,select将一直被阻塞直到某个文件描述符上发生了事件0仅检测描述符集合的状态然后立即返回并不等待外部事件的发生特定的结构值如果在指定的时间段内没有事件发生select将超时返回。 fd_set结构 这个结构就是一个整数数组更严格的说是一个位图使用位图中对应的位来表示要监视的文件描述符有一组fd_set接口来比较方便操作位图 void FD_CLR(int fd, fd_set *set); // 用来清除描述词组set中相关fd 的位 int FD_ISSET(int fd, fd_set *set); // 用来测试描述词组set中相关fd 的位是否为真 void FD_SET(int fd, fd_set *set); // 用来设置描述词组set中相关fd的位 void FD_ZERO(fd_set *set); // 用来清除描述词组set的全部位 关于timeval结构 timeval结构用于描述一段时间长度如果在这个时间内需要监视的描述符没有事件发生则函数返回返回值为0 strcut timeval {__time_t tv_sec; //seconds__suseconds_t tv_usec; //microseconds };函数返回值 执行成功则返回文件描述词状态已改变的个数如果返回0代表在描述词状态改变前已经超过timeout时间没有返回当有错误发生时则返回-1错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测 错误值可能为 EBADF 文件描述词为无效的或者该文件已关闭EINTR 此调用被信号中断EINVAL 参数n为负值ENOMEN 核心内存不足 常见使用场景 fs_set readset; FD_SET(fd,readset); select(fd1,readset,NULL,NULL,NULL); if(FD_ISSET(fd,readset)){...}3.理解select执行过程 理解select模型的关键在于理解ds_set这里取fd_set长度为1字节fd_set中的每一个bit可以对应一个文件描述符fd,则1字节长的fd_set最大可以对应8个fd 执行fd_set set; FD_ZERO(set); 则set用位表示是0000 0000若fd 5 执行FD_SET(fd,set);后变为0001 0000若再加入fd 2,fd 1,则set变成 0001 0011执行select(6,set,0,0,0); 阻塞等待若fd 1,fd 2 上都发生可读事件则select返回此时set变为0000 0011注意没有事件发生的fd 5被清空 4.select的特点 可监控的文件描述符个数取决与sizeof(fd_set)的值比如sizeof(fd_set)512,每bit表示一个文件描述符则服务器上支持的最大文件描述符是512*8 4096将fd加入select监控集的同时还要再使用一个数据结构array进行FD_ISSET判断select返回后会把以前加入但是没有发生事件的fd清空则每次开始select前都要重新从array取得fd逐一加入扫描array的同时取得fd的最大maxfd,用于select的第一个参数 5.select的缺点 每次调用select都需要手动设置fd集合从接口使用角度也非常不便每次调用select,都需要把fd从用户态拷贝到内核态这个开销在fd很多时会很大同时每次调用select都需要在内核遍历传入的所有fdfd很多的时候开销很大select支持的文件描述符数量太少 6.select使用示例检测标准输入输出 #includestdio.h #includeunistd.h #includesys/select.hint main() {fd_set read_fds;FD_ZERO(read_fds);FD_SET(0read_fds);for(;;){printf( );fflush(stdout);int ret select(1,read_fds,NULL,NULL,NULL);if(ret 0){perror(select);continue;}if(FD_ISSET(0,read_fds)){char buf[1024] {0};read(0,buf,sizeof(buf)-1);printf(input:%s,buf);}else{printf(invalid fd);continue;}FD_ZERO(read_fds);FD_SET(0,read_fds);}return 0; } 7.select使用实例 参照gitee实现select字典服务器 六、IO多路转接之poll 1.poll函数接口 #includepoll.hint poll(struct pollfd * fds,nfds_t nfds, int timeout);//pollfd结构 struct pollfd{int fd;short events; //requested eventsshort revents; // returned events }; 2.参数说明 fds是一个poll函数监听的结构列表每一个元素中包含3部分内容fd,监听的事件集合返回的事件集合nfds表示fds数组的长度timeout表示poll函数的超时时间单位是ms 3.返回结果 返回值小于0表示出错 返回值等于0表示poll函数等待超时 返回值大于0表示poll由于监听的fd就绪而返回 4.poll的优点 不同与select使用三个位图来表示fdset的方式poll使用一个pollfd指针实现 pollfd结构包含了要监视的event和发生的event不再使用select“参数-值”传递的方式接口使用比select更方便poll没有max数量限制但是数量过大后性能也是会下降 5.poll的缺点 poll中监听的文件fd增多时 和select函数一样poll返回后需要轮询pollfd来获取就绪的fd每次调用poll都需要把大量的pollfd结构从用户态拷贝到内核中同时连接的大量客户端在一时刻可能只有很少的处于就绪状态因此随着监视的fd数量增加效率也会线性下降 6.poll使用实例使用poll监控标准输入 #include poll.h #include unistd.h #include stdio.h int main() {struct pollfd poll_fd;poll_fd.fd 0;poll_fd.events POLLIN;for (;;) {int ret poll(poll_fd, 1, 1000);if (ret 0) {perror(poll);continue;}if (ret 0) {printf(poll timeout\n);continue;}if (poll_fd.revents POLLIN) {char buf[1024] {0};read(0, buf, sizeof(buf) - 1);printf(stdin:%s, buf);}} } 总结 本文主要介绍了select和poll下一篇文章详解epoll
http://www.sadfv.cn/news/45148/

相关文章:

  • 营销型网站推广方案廊坊建设局网站
  • 东莞人才网官方网站网站建设培训班多少钱
  • 企业网站建设管理视频衡水网站建设03181688
  • wordpress修改网站名称wordpress 4.5 汉化主题
  • 什么软件可以做网站公司网站设计案例
  • vip视频解析网站怎么做的大莲网站建设公司
  • 杭州网站建设网络公司中企动力科技股份有限责任公司
  • 长治建一个网站大概要多少钱建筑八大员报考时间和条件
  • 外贸网站contactwordpress评论开关
  • 集团网站建设流程做网站排名要多少钱
  • 网站数据报表wordpress回复微信查看
  • 网站打开不对带财运的公司名字
  • 福建城乡建设网站查询怎么制作图片视频短片
  • 阳泉推广型网站开发wordpress 多说评论
  • 水墨画风格网站水滴查企业查询
  • 网站建设除凡科外还有哪些google海外版入口
  • 英文网站建设 深圳江苏省建设工程网
  • 网站漂浮窗口代码网络推广营销服务
  • wordpress没权重seo网站推广技术
  • 阿里百秀网站网页设计基础知识选择题
  • 企业网站建设的征求意见正能量网站地址链接免费
  • 百度搜索官方网站如何利用网站来提升企业形象
  • 查工作单位的网站网站的建设费 账务处理
  • 安吉网站建设dede wap网站
  • 网站图片布局利用php做网站
  • 网站建设中主机放在哪里开封网站建设培训班
  • 网站在线生成器微信扫码关注登陆wordpress
  • 公司网站免费建站云计算公司排名
  • 网站建设实习心得图片 网站源码 采集
  • 网站建设山东聚搜网络一x广东三网合一网站建设报价