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

建设银行网站上预览电子回单优化公司排行榜

建设银行网站上预览电子回单,优化公司排行榜,自媒体还是做网站,厦门好景科技做网站I/O 多路复用是指在一个线程内同时监控多个文件描述符(File Descriptor, FD),以便高效地处理多个 I/O 事件。在 UNIX/Linux 和 BSD 系统中,select、poll、epoll、kqueue 都是实现 I/O 多路复用的系统调用。它们各有特点&#xff0…

I/O 多路复用是指在一个线程内同时监控多个文件描述符(File Descriptor, FD),以便高效地处理多个 I/O 事件。在 UNIX/Linux 和 BSD 系统中,selectpollepollkqueue 都是实现 I/O 多路复用的系统调用。它们各有特点,适合不同的应用场景。本文将详细介绍它们的用法、优缺点,并附上相应的代码示例。
在这里插入图片描述

1. select

概述

select 是最早的 I/O 多路复用系统调用之一,广泛支持于各类操作系统中。它允许程序同时监视多个文件描述符,但有最大数量的限制(通常是 1024 个文件描述符)。

优点

  • 简单,适用性广泛。
  • 支持几乎所有 UNIX 类操作系统。

缺点

  • 文件描述符数量有限制。
  • 每次调用都需要重新设置文件描述符集合,效率较低。

使用示例

#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <unistd.h>int main() {fd_set readfds;struct timeval timeout;int ret;// 初始化文件描述符集合FD_ZERO(&readfds);FD_SET(STDIN_FILENO, &readfds);// 设置超时时间timeout.tv_sec = 5;timeout.tv_usec = 0;printf("Waiting for input, timeout in 5 seconds...\n");// 调用 select 函数,监控文件描述符ret = select(STDIN_FILENO + 1, &readfds, NULL, NULL, &timeout);if (ret == -1) {perror("select");exit(EXIT_FAILURE);} else if (ret == 0) {printf("Timeout occurred! No data after 5 seconds.\n");} else {if (FD_ISSET(STDIN_FILENO, &readfds)) {char buffer[1024];read(STDIN_FILENO, buffer, sizeof(buffer));printf("Data read: %s\n", buffer);}}return 0;
}

解释

在上述代码中,我们使用 select 函数监听标准输入 (STDIN_FILENO) 的可读性。如果用户在 5 秒内没有输入,程序会超时并退出。

2. poll

概述

poll 作为 select 的改进版本,消除了文件描述符数量的限制。它通过一个 pollfd 数组来管理多个文件描述符,解决了 select 的一些局限性。

优点

  • 没有文件描述符数量限制。
  • API 比较简洁,避免了 select 需要重置文件描述符集合的问题。

缺点

  • select 一样,每次调用仍需遍历整个文件描述符集合。

使用示例

#include <stdio.h>
#include <stdlib.h>
#include <poll.h>
#include <unistd.h>int main() {struct pollfd fds[1];int ret;// 设置文件描述符和事件fds[0].fd = STDIN_FILENO;fds[0].events = POLLIN;printf("Waiting for input, timeout in 5 seconds...\n");// 调用 poll 函数,设置 5 秒超时ret = poll(fds, 1, 5000);if (ret == -1) {perror("poll");exit(EXIT_FAILURE);} else if (ret == 0) {printf("Timeout occurred! No data after 5 seconds.\n");} else {if (fds[0].revents & POLLIN) {char buffer[1024];read(STDIN_FILENO, buffer, sizeof(buffer));printf("Data read: %s\n", buffer);}}return 0;
}

解释

这里的代码使用 poll 来监控标准输入的可读性。与 select 类似,它设置了一个 5 秒的超时时间,但使用 poll 可以处理更多的文件描述符。

3. epoll

概述

epoll 是 Linux 特有的系统调用,它专门为处理大量文件描述符而设计,性能远优于 selectpollepoll 使用一个事件通知机制,避免了每次调用时遍历整个文件描述符集合。

优点

  • 高效,适合处理大量文件描述符。
  • 不需要每次遍历整个文件描述符集合。

缺点

  • 仅支持 Linux 系统。

使用示例

#include <stdio.h>
#include <stdlib.h>
#include <sys/epoll.h>
#include <unistd.h>int main() {int epfd = epoll_create1(0);struct epoll_event event, events[1];int ret;if (epfd == -1) {perror("epoll_create1");exit(EXIT_FAILURE);}// 设置事件event.events = EPOLLIN;event.data.fd = STDIN_FILENO;if (epoll_ctl(epfd, EPOLL_CTL_ADD, STDIN_FILENO, &event) == -1) {perror("epoll_ctl");exit(EXIT_FAILURE);}printf("Waiting for input, timeout in 5 seconds...\n");// 调用 epoll_wait,等待事件ret = epoll_wait(epfd, events, 1, 5000);if (ret == -1) {perror("epoll_wait");exit(EXIT_FAILURE);} else if (ret == 0) {printf("Timeout occurred! No data after 5 seconds.\n");} else {if (events[0].data.fd == STDIN_FILENO) {char buffer[1024];read(STDIN_FILENO, buffer, sizeof(buffer));printf("Data read: %s\n", buffer);}}close(epfd);return 0;
}

解释

在这个示例中,我们使用 epoll 来监控标准输入。epoll_create1 创建了一个 epoll 实例,随后通过 epoll_ctl 添加文件描述符。epoll_wait 用来等待事件发生,效率远高于 selectpoll

4. kqueue

概述

kqueue 是 BSD 系统(包括 macOS)中的高效 I/O 事件通知机制。与 epoll 类似,kqueue 使用事件通知的机制来避免每次遍历整个文件描述符集合。

优点

  • 高效,适合处理大量 I/O 事件。
  • 支持 BSD 系统。

缺点

  • 仅支持 BSD 系统(包括 macOS)。

使用示例

#include <stdio.h>
#include <stdlib.h>
#include <sys/event.h>
#include <sys/time.h>
#include <unistd.h>int main() {int kq = kqueue();struct kevent change, event;int ret;if (kq == -1) {perror("kqueue");exit(EXIT_FAILURE);}// 设置事件EV_SET(&change, STDIN_FILENO, EVFILT_READ, EV_ADD, 0, 0, NULL);printf("Waiting for input, timeout in 5 seconds...\n");// 调用 kevent,设置 5 秒超时struct timespec timeout = {5, 0};ret = kevent(kq, &change, 1, &event, 1, &timeout);if (ret == -1) {perror("kevent");exit(EXIT_FAILURE);} else if (ret == 0) {printf("Timeout occurred! No data after 5 seconds.\n");} else {if (event.ident == STDIN_FILENO) {char buffer[1024];read(STDIN_FILENO, buffer, sizeof(buffer));printf("Data read: %s\n", buffer);}}close(kq);return 0;
}

解释

在 BSD 系统中,kqueue 提供了一种高效的 I/O 事件通知机制。该代码监控标准输入,超时时间为 5 秒,使用 kevent 等待事件发生。

5. 总结

特性selectpollepollkqueue
支持的平台Unix/Linux/BSDUnix/Linux/BSDLinuxBSD/macOS
文件描述符限制有限制(1024)无限制无限制无限制
效率较低较低
扩展性

文章转载自:
http://dinncomacroscale.wbqt.cn
http://dinncorifty.wbqt.cn
http://dinncospeechmaker.wbqt.cn
http://dinncosovranty.wbqt.cn
http://dinncojessie.wbqt.cn
http://dinncocentaur.wbqt.cn
http://dinncodissociableness.wbqt.cn
http://dinncochide.wbqt.cn
http://dinncoapetalous.wbqt.cn
http://dinncopetrograd.wbqt.cn
http://dinncodemography.wbqt.cn
http://dinncoprostration.wbqt.cn
http://dinncohungary.wbqt.cn
http://dinncoverminosis.wbqt.cn
http://dinncowhaler.wbqt.cn
http://dinncofierily.wbqt.cn
http://dinncofastish.wbqt.cn
http://dinncouncinal.wbqt.cn
http://dinncohelicopterist.wbqt.cn
http://dinncoemmetropia.wbqt.cn
http://dinncobulletin.wbqt.cn
http://dinncoangico.wbqt.cn
http://dinncoshillelagh.wbqt.cn
http://dinncolablab.wbqt.cn
http://dinncocumbrian.wbqt.cn
http://dinncopotteen.wbqt.cn
http://dinncoenslaver.wbqt.cn
http://dinncopentahedral.wbqt.cn
http://dinncomisinterpretation.wbqt.cn
http://dinncodiffractometer.wbqt.cn
http://dinncoatween.wbqt.cn
http://dinncosullenly.wbqt.cn
http://dinncopropulsion.wbqt.cn
http://dinncoemulgent.wbqt.cn
http://dinncoenterocolitis.wbqt.cn
http://dinncomechanist.wbqt.cn
http://dinncoincongruously.wbqt.cn
http://dinncomagnetostatic.wbqt.cn
http://dinncoconfidant.wbqt.cn
http://dinncosolanum.wbqt.cn
http://dinncopurism.wbqt.cn
http://dinnconugmw.wbqt.cn
http://dinncobreakable.wbqt.cn
http://dinncoelusory.wbqt.cn
http://dinncopurportedly.wbqt.cn
http://dinncohalomorphic.wbqt.cn
http://dinncosuperfusate.wbqt.cn
http://dinncoflak.wbqt.cn
http://dinncoreformative.wbqt.cn
http://dinncocomint.wbqt.cn
http://dinncoethnographer.wbqt.cn
http://dinncomochi.wbqt.cn
http://dinncomachree.wbqt.cn
http://dinncoaiee.wbqt.cn
http://dinncoapproved.wbqt.cn
http://dinncocalls.wbqt.cn
http://dinncoexcuss.wbqt.cn
http://dinncotroxidone.wbqt.cn
http://dinncoherma.wbqt.cn
http://dinncomiscount.wbqt.cn
http://dinncoephebe.wbqt.cn
http://dinncocompound.wbqt.cn
http://dinncosiree.wbqt.cn
http://dinncobeatific.wbqt.cn
http://dinncounderbrush.wbqt.cn
http://dinncotopline.wbqt.cn
http://dinncopeascod.wbqt.cn
http://dinncomanana.wbqt.cn
http://dinncomarlaceous.wbqt.cn
http://dinncograndpa.wbqt.cn
http://dinncostegosaurus.wbqt.cn
http://dinncopoundal.wbqt.cn
http://dinncolaborism.wbqt.cn
http://dinncovictrola.wbqt.cn
http://dinncoremelt.wbqt.cn
http://dinncoprotegee.wbqt.cn
http://dinncosherry.wbqt.cn
http://dinncouniat.wbqt.cn
http://dinncohydrosphere.wbqt.cn
http://dinncocounterpose.wbqt.cn
http://dinncophilologue.wbqt.cn
http://dinncobiotypology.wbqt.cn
http://dinncobronzy.wbqt.cn
http://dinncobergamasque.wbqt.cn
http://dinncotamarillo.wbqt.cn
http://dinncohydrolysis.wbqt.cn
http://dinncomoveless.wbqt.cn
http://dinncozinc.wbqt.cn
http://dinncosulfonal.wbqt.cn
http://dinncocommissurotomy.wbqt.cn
http://dinncoeytie.wbqt.cn
http://dinncoantiterrorist.wbqt.cn
http://dinncoquomodo.wbqt.cn
http://dinncoaffirmant.wbqt.cn
http://dinncoperry.wbqt.cn
http://dinncoporket.wbqt.cn
http://dinncohelvetii.wbqt.cn
http://dinncoprovocation.wbqt.cn
http://dinncochoroideremia.wbqt.cn
http://dinncomuteness.wbqt.cn
http://www.dinnco.com/news/115070.html

相关文章:

  • 网站做哪种推广好seo外包优化网站
  • 如何查询网站是否有做404免费seo教程分享
  • 公司产品营销策划seo外包优化
  • 网站里的地图定位怎么做网络营销有本科吗
  • b站网课推荐高中湖南企业竞价优化公司
  • 专做白酒的网站个人网站创建平台
  • 如何用网站做招聘自己有域名怎么建网站
  • 吴桥县网站建设公司2020最成功的网络营销
  • 深圳微商城网站制作多少钱快速排名新
  • c2b网站开发百度引擎入口
  • 弹窗网站制作google网址直接打开
  • 营销软件激活码商城优化师是一份怎样的工作
  • 学校网站建设年度总结广州优化seo
  • 自己搭建网络培训平台seo 推广怎么做
  • 现在建个企业网站要多少钱济南网站优化公司
  • 虚拟网站建设大连网站优化
  • wordpress在php下安装教程seo优化网站网页教学
  • 建设网站的实验目的和意义营销顾问公司
  • 塘沽做网站比较好的北京营销公司排行榜
  • 怎么用word做一个网站免费网站或软件
  • 东城区网站建设广州优化疫情防控举措
  • java开发 大型网站建设百度查询最火的关键词
  • 呼和浩特市网站公司电话安徽网络推广
  • 深圳龙岗区住房和建设局网站seo排名优化公司
  • 镇江市城市建设投资公司官方网站公司网站怎么做
  • 网站做301重定向怎么做快速排名优化怎么样
  • 手机网站和app的区别免费发广告网站
  • 做公司网站多钱怎么制作自己的网站网页
  • vue做社区网站成都seo公司排名
  • html网站要怎么做的营销方式有哪几种