企业门户网站需求模板软件设计公司排名

pingmian/2026/1/25 22:17:59/文章来源:
企业门户网站需求模板,软件设计公司排名,深圳seo网站排名优化,郑州网站制作的公司此为牛客Linux C课程和黑马Linux系统编程笔记。 1. 关于epoll epoll是Linux下多路复用IO接口select/poll的增强版本#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率#xff0c;因为它会复用文件描述符集合来传递结果而不用迫使开发者每次…此为牛客Linux C课程和黑马Linux系统编程笔记。 1. 关于epoll epoll是Linux下多路复用IO接口select/poll的增强版本它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合另一点原因就是获取事件的时候它无须遍历整个被侦听的描述符集只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。 目前epoll是linux大规模并发网络程序中的热门首选模型。 epoll除了提供select/poll那种IO事件的水平触发Level Triggered外还提供了边沿触发Edge Triggered这就使得用户空间程序有可能缓存IO状态减少epoll_wait/epoll_pwait的调用提高应用程序效率。 2. epoll API介绍 2.1 创建epoll实例epoll_create #include sys/epoll.h int epoll_create(int size);功能在内核中创建一个新的epoll实例并返回一个操纵该epoll的文件描述符这个文件描述符和真正的文件没有关系仅仅是为了后续调用epoll而创建的。该函数调用后在内核中创建了一个存储事件的数据结构这个数据结构中有两个比较重要的子结构一个是需要检测的文件描述符的信息使用红黑树实现还有一个是就绪列表存放检测到数据发送改变的文件描述符信息使用双向链表实现关于epoll更详细的内部实现在这里不详细讨论。 参数size : 自从linux2.6.8之后size参数是被忽略的。随便写一个数必须大于0。 返回值 -1 : 失败 0 : 用于操作epoll实例的文件描述符 2.2 注册epoll的监听事件epoll_ctl int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);功能向内核中的epoll实例中添加、修改、移除事件。epoll和select的一个显著区别就在这里select是在监听事件时告诉内核要监听什么类型的事件而epoll是在这里先注册要监听的事件类型然后再调用epoll_wait监听。 参数 epfd : epoll实例对应的文件描述符op : 要进行什么操作 EPOLL_CTL_ADD: 添加 EPOLL_CTL_MOD: 修改 EPOLL_CTL_DEL: 删除fd : 要检测的文件描述符event : 检测文件描述符什么事件这里涉及到epoll_event定义如下 struct epoll_event {uint32_t events; /* Epoll events */epoll_data_t data; /* User data variable */ };typedef union epoll_data {void *ptr;int fd;uint32_t u32;uint64_t u64; } epoll_data_t;这里我们只需要关注两个字段即可events和data.fd 其中events表示要检测的事件有以下选择 EPOLLIN 表示对应的文件描述符可以读包括对端SOCKET正常关闭 EPOLLOUT表示对应的文件描述符可以写 EPOLLPRI表示对应的文件描述符有紧急的数据可读这里应该表示有带外数据到来 EPOLLERR表示对应的文件描述符发生错误 EPOLLHUP表示对应的文件描述符被挂断 EPOLLET 将EPOLL设为边缘触发(Edge Triggered)模式这是相对于水平触发(Level Triggered)来说的。 EPOLLONESHOT只监听一次事件当监听完这次事件之后如果还需要继续监听这个socket的话需要再次把这个socket加入到EPOLL队列里。 其中data.fd表示该事件对应的socket的文件描述符。 返回值 成功返回发送变化的文件描述符的个数 0失败 -1 2.3 监听事件epoll_wait int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);功能等待已注册的事件发生返回事件的数目并将已触发的事件写入events数组第二个参数中。 参数 epfd : epoll实例对应的文件描述符events : 传出参数保存了发送了变化的文件描述符的信息需要调用者先创建好maxevents : 第二个参数结构体数组的大小timeout : 阻塞时间 0 : 不阻塞-1 : 阻塞直到检测到fd数据发生变化解除阻塞 0 : 阻塞的时长毫秒 返回值 成功返回发送变化的文件描述符的个数 0失败 -1 3. 示例程序 以下用epoll实现了一个简单的服务端把客户端传来的小写字母转换成大写字母并传回给客户端。 /*用epoll实现一个简单的服务器-客户端通信*/#include stdio.h #include unistd.h #include arpa/inet.h #include stdlib.h #include pthread.h #include strings.h #include sys/epoll.h// 设定一个服务器端口号 #define SERV_IP 127.0.0.1 #define SERV_PORT 9999int main() {int lfd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in serv_addr;serv_addr.sin_family AF_INET;serv_addr.sin_port htons(SERV_PORT); // 注意转化成网络字节序inet_pton(AF_INET, SERV_IP, serv_addr.sin_addr.s_addr); // 注意转化成网络字节序bind(lfd, (struct sockaddr*)serv_addr, sizeof(serv_addr));listen(lfd, 128);int epfd epoll_create(100); // 内核创建epoll实例struct epoll_event epev;epev.events EPOLLIN; // 要检测lfd的读事件epev.data.fd lfd;// 注册了对lfd的监听此后如果不删除这个注册信息每次调用epoll_wait都将监听lfd的读事件也就是客户端的连接epoll_ctl(epfd, EPOLL_CTL_ADD, lfd, epev); struct epoll_event epevs[1024]; // 用作epoll_wait的第二个参数传出参数 while(1) {int ret epoll_wait(epfd, epevs, 1024, -1); // 监听已注册的事件最后一个参数-1表示阻塞等待if(ret -1) {perror(epoll_wait error);exit(-1);}// 一旦走到这里说明解除了阻塞就是指epoll监测到了事件的发生遍历每个事件for(int i 0; i ret; i) {int curfd epevs[i].data.fd; // 表示当前触发的事件对应的fdif(curfd lfd) { // 如果监听到lfd的读事件了说明有一个新客户端建立连接struct sockaddr_in clie_addr;int clie_addr_len sizeof(clie_addr); int cfd accept(lfd, (struct sockaddr*)clie_addr, clie_addr_len);char clie_IP[BUFSIZ];printf(Client IP: %s, client port: %d connected\n, inet_ntop(AF_INET, clie_addr.sin_addr.s_addr, clie_IP, sizeof(clie_IP)),ntohs(clie_addr.sin_port));epev.events EPOLLIN; // 要检测cfd的读事件epev.data.fd cfd;epoll_ctl(epfd, EPOLL_CTL_ADD, cfd, epev); // 把对该cfd的读事件监听注册上以后epoll会同时监听lfd和cfd} else { // 说明检测到的是某个cfd的读事件读该客户端传来的数据char buf[BUFSIZ] {0};int len read(curfd, buf, sizeof(buf));if(len 0) {// 小写转大写int i;for(i 0; i len; i) {if(buf[i] a buf[i] z) {buf[i] - 32;}}write(curfd, buf, len); // 写回给客户端write(STDOUT_FILENO, buf, len);} else if(len 0) {// 说明读完了客户端已关闭此时epoll已经没有必要继续监听该cfd了epoll_ctl(epfd, EPOLL_CTL_DEL, curfd, NULL);close(curfd);} else {perror(read error);exit(-1);}}}}close(lfd);close(epfd); // 别忘了关epfdreturn 0; }4. epoll的两种触发方式 EPOLL事件有两种模型 Edge Triggered (ET) 边缘触发只有数据到来才触发不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会触发。 LTlevel - triggered是缺省的工作方式并且同时支持 block 和 no-block socket。在这种做法中内核告诉你一个文件描述符是否就绪了然后你可以对这个就绪的 fd 进行 IO 操作。如果你不作任何操作内核还是会继续通知你的。 ETedge - triggered是高速工作方式只支持 no-block socket。在这种模式下当描述符从未就绪变为就绪时内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪并且不会再为那个文件描述符发送更多的就绪通知直到你做了某些操作导致那个文件描述符不再为就绪状态了。但是请注意如果一直不对这个 fd 作 IO 操作从而导致它再次变成未就绪内核不会发送更多的通知only once。 ET 模式在很大程度上减少了 epoll 事件被重复触发的次数因此效率要比 LT 模式高。epoll工作在 ET 模式的时候必须使用非阻塞套接口以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。 关于LT和ET的详细介绍以及为什么ET模式要搭配非阻塞IO见这篇博客写的极好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

萝岗微网站建设简单静态网页制作代码

1.Srvlet概述 Servlet是运行在java服务器端的程序,用于接收和响应来着客户端基于HTTP协议的请求 如果想实现Servlet的功能,可以通过实现javax。servlet。Servlet接口或者继承它的实现类 核心方法:service()&#xf…

做爰全过程免费的教网站东莞做网站公司哪家好

在学习代码期间,练习代码是必不可少的内容,同样的对知识点的回顾也是更加重要的,在练代码的同时回顾知识点效果会更好。(知识会有重复的,我遵循的是不论是什么时候的知识都会从头来一遍,对于新掌握的我会再…

视频网站开发步骤建设网站企业网上银行登录入口

零售行业最本质的需求就是降本增效、引流提销,实现利润最大化。如何利用大数据、人工智能、云计算、AIOT等前沿技术,助力企业数智化转型,全生态效率提升和可持续发展,是零售企业的核心诉求。 零售行业客流管理的现状 零售行业已进…

南平建设集团有限公司网站佛山自定义网站建设

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证方式一 curl方式二 bp抓捕 1.5、修复建议 说明内容漏洞编号CVE-2021-42013漏洞名称…

图片做旧网站贡井区建设局网站

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“刚体洛希极限”,地球面临被彻底撕碎的危险。但实际上,这个计算是错误的。 洛希极限(Roche limit)是一…

做毕业设计免费网站建设网站建设88

问题复现(信心满满使用转义字符换行) 解决方法: 写多个-m字符串的结构可以实现自动换行 注意空格 git commit -m"第一行描述" -m"第二行描述" 效果演示:(强迫症福利)

彩票网站怎么做赚钱吗网站建设专利

文章目录安装包控件(Package Control)如何安装插件打开 Install Package 面板搜索和安装插件无法打开 Install Package 面板的问题故障排除安装包控件(Package Control) 要安装插件,必须先安装 Package Control&#…

招代理的网站建设公司推广方法英文

C语言的一大重头戏就是指针。 对于指针有一些认识: 1.指针是存放变量的地址,一般说的指针和指针变量是一个概念。 2.地址的单位是字节,大小在不同编译器环境下有所不同,32位机器是4个字节,64位机器是8个字节。 3.数组名…

四川省建设工程信息网站工业互联网平台建设

http://haoyeren.blog.sohu.com/86590116.html http://blog.chinaunix.net/uid-20564848-id-3947194.html http://blog.sina.com.cn/s/articlelist_2314879471_0_1.html

国外摄影网站骏驰网站建设

入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程。(导航栏请参见官方文档的导航栏) 在第一个大项里&#xff0c…

河南国安建设集团有限公司网站网站建设如何商谈

一、集合 1.1 简介 集合主要分为两组(单列集合、双列集合),Collection 接口有两个重要的子接口 List 和Set,它们的实现子类都是单列集合。Map 接口的实现子类是双列集合,存放的是 K-V 1.2 关系图 二、Collection 接口…

郴州网站设计公司广州注册个体户流程及费用

标签(空格分隔): Javajavascript习惯了eclipse的自动编译,Java命令行编译、执行文件只会最基础的部分,就是对单文件的编译和执行,并且不包含任何外部JAR包。但有时候你还非得用命令行,会碰到一些问题,博主这…

如何用front怕个做网站做狗狗网站的背景图

共享办公室,又称联合办公、众创空间、孵化器等,是一种将空闲的办公空间出租给不同的企业或个人,提供灵活的租期、价格和服务的新型办公模式。共享办公室的出现,满足了新兴企业和自由职业者对于低成本、高效率、多元化的办公需求&a…

设计师如何注册个人网站广州市网站建设公司在哪里

我正在使用k-means聚类算法,并且对于每个聚类质心,我试图为质心生成n维Voronoi区域 . 之后我需要从Voronoi区域生成随机点 .我已经尝试使用Matlab / Octave和scipy来获得n维Voronoi区域 . 但我有两个问题 .生成顶点和区域后,如何从区域生成随…

如何提高网站吸引力在百度上做网站怎么做

一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

辽宁网站备案要多久福建省建设执业注册与管理中心网站

首先,回顾并详细说明一下在快速入门中使用的Controller、RestController、RequestMapping注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 Controller:修饰class,用来创建处理http请…

浙江网站建设专家评价Pc端做社区网站用什么框架

在fread时,"rb"与"r"对某些字符作用,是不同的; 文本模式和二进制模式读取不一样的 文本:读: 遇到回车-换行(0D 0A),就会转换为换行符0A 写:遇到换行符0A,就会转换为回车-换…

仿一个网站山西省住房和城乡建设厅网站首页

本文仅为【2023传智杯】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言更新进度记录二.比赛题目(AB俩组)D题题目-abbE题题目 -kotori和…

asp.net网站开发四酷全书小程序第三方平台

前面步骤 http://t.csdnimg.cn/IPXMY 1、解释 在数据库中,单表的操作是最简单的,但是在实际业务中最少也有十几张表,并且表与表之间常常相互间联系; 一对一、一对多、多对多是表与表之间的常见的关系。 一对一:一张…