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

网站设计要注意事项网站开发工程师的经验

网站设计要注意事项,网站开发工程师的经验,中国十大动漫学校,微信小程序什么时候上线的select特点:1. 使用位图(数组)实现对文件描述符集合的保存,最多允许同时监测1024个文件描述符; 2. 需要应用和内核层的反复数据(文件描述符集合表)拷贝; 3. 返回的集合表需要遍历寻找…

select特点:

1. 使用位图(数组)实现对文件描述符集合的保存,最多允许同时监测1024个文件描述符;
2. 需要应用和内核层的反复数据(文件描述符集合表)拷贝;
3. 返回的集合表需要遍历寻找到达的事件;
4. 只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式)。

poll特点:

1. 使用链表实现对文件描述符集合的保存,没有了监测的文件描述符上限限制;
2. 需要应用和内核层的反复数据(文件描述符集合表)拷贝;
3. 返回的集合表需要遍历寻找到达的事件;
4. 只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式)。

epoll特点:

1. 使用红黑树(二叉树)实现文件描述符集合的存储,没有文件描述符上限限制,提高查找效率;
2. 将文件描述符集合创建在内核层,避免了应用层和内核层的反复数据拷贝;
3. 返回的是到达事件,不需要遍历,只需要处理事件即可;
4. 可工作在水平触发模式(低速模式),也可工作在边沿触发模式(高速模式)。

epoll构建流程:

1. 创建文件描述符集合 : int epoll_create(int size);
2. 添加关注的文件描述符:int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
3. epoll通知内核开始进行事件监测 :int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
4. epoll返回时,获取到达事件的结果
5. 根据到达事件做任务处理


int epoll_create(int size);
功能:通知内核创建文件描述符集合
参数: 
size:监测的文件描述符个数
返回值:
成功:文件描述符(代表内核创建的集合)
失败:-1

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
功能:对epoll的文件描述符集合进行操作
参数:
epfd:创建的epoll集合
op:对文件描述符集合进行的操作
EPOLL_CTL_ADD  : 添加文件描述符到集合
EPOLL_CTL_MOD : 修改集合中的文件描述符
EPOLL_CTL_DEL   :删除集合中的文件描述符
fd:要操作的文件描述符
event:文件描述符对应的事件
typedef union epoll_data {
void        *ptr;
int          fd;
uint32_t     u32;
uint64_t     u64;
} epoll_data_t;

           struct epoll_event {
uint32_t     events;      /* Epoll events */              
epoll_data_t data;        /* User data variable */
};
events:文件描述符的事件:
EPOLLIN: 读事件
EOPLLOUT:写事件
data.fd : 关注的文件描述符

返回值:
成功:0
失败:-1
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
功能:通知内核开始监测文件描述符的事件
参数:
epfd:监测的文件描述符集合
events:保存返回的到达事件的结果(数组)
struct epoll_event evs[MAX_FD_CNT];
evs;
maxevents:最大的事件个数
timeout:监测的超时时间
-1 :不设置超时(一直阻塞)

返回值:
成功:到达的事件的个数
失败:-1
利用epoll构建并发服务器

#include "head.h"#define SER_PORT 50001
#define SER_IP "192.168.0.180"
int n = 1;int init_tcp_ser()
{int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0){perror("socket error");return -1;}struct sockaddr_in seraddr;seraddr.sin_family = AF_INET;seraddr.sin_port = htons(SER_PORT);seraddr.sin_addr.s_addr = inet_addr(SER_IP);int ret = bind(sockfd, (struct sockaddr *)&seraddr, sizeof(seraddr));if (ret < 0){perror("bind error");close(sockfd);return -1;}ret = listen(sockfd, 5);if (ret < 0){perror("listen error");close(sockfd);return -1;}return sockfd;
}int epoll_fd_add(int epfds, int fd, uint32_t events)
{struct epoll_event ev;ev.events = events;ev.data.fd = fd;int ret = epoll_ctl(epfds, EPOLL_CTL_ADD, fd, &ev);if (ret < 0){perror("add error");return -1;}return 0;
}int main()
{struct sockaddr_in cliaddr;socklen_t clilen = sizeof(cliaddr);int sockfd = init_tcp_ser();if (sockfd < 0){return -1;}int epfds = epoll_create(n);if (epfds < 0){perror("epoll_create error");return -1;}epoll_fd_add(epfds, sockfd, EPOLLIN);struct epoll_event evs[1024];char buff[1024] = {0};while (1){int count = epoll_wait(epfds, evs, n, -1);if (count < 0){perror("epoll_wait error");return -1;}for (int i = 0; i < count; ++i){if (evs[i].data.fd == sockfd){int connfd = accept(sockfd, (struct sockaddr *)&cliaddr, &clilen);if (connfd < 0){perror("accept error:");return -1;}epoll_fd_add(epfds, connfd, EPOLLIN);++n;}else{memset(buff, 0, sizeof(buff));ssize_t cnt = recv(evs[i].data.fd, buff, sizeof(buff), 0);if (cnt < 0){perror("receive error");epoll_ctl(epfds, EPOLL_CTL_DEL, evs[i].data.fd,NULL);close(evs[i].data.fd);continue;}else if (cnt == 0){printf("offline\n");epoll_ctl(epfds, EPOLL_CTL_DEL, evs[i].data.fd,NULL);close(evs[i].data.fd);break;}printf("%s\n", buff);}}}close(sockfd);return 0;
}

http://www.dtcms.com/a/467389.html

相关文章:

  • 网站备案 座机wordpress 搭建论坛
  • 保定做网站建设河南网站怎么备案
  • 做网站和维护要多少钱wordpress朋友圈图片不显示
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十一)MySQL数据库基础
  • 超越提示词:Anthropic 揭示下一代AI智能体的关键——上下文工程
  • 永康建设局网站天台县低价网站建设
  • 大数据存储优化:从 Mysql 到 Redis Bitmap ,高效存储用户签到记录
  • 网站地图怎么做的晋江做网站模板
  • 卷积神经网络CNN(一):卷积操作
  • RynnVLA-001-7B: 使用人类演示增强机器人Manipulation--达摩院--2025.9.18--开源
  • 网站怎么更新数据云南模板网站建设公司
  • 三维网格(mesh)
  • 做网站需要哪些人才建设网站的心得
  • 银川网站建设是什么19楼网站模板
  • 建设旅游网站的目标大型网站建设基本流程
  • 卷积神经网络CNN(二):对于图像处理的意义
  • 钢材料 网站建设 中企动力网站备案单位查询
  • 高明专业网站建设哪家好永久免费无代码开发平台网站
  • 基于MATLAB/Simulink的飞行器六自由度控制仿真
  • OpenAI 发布Sora2,还发布了 1 个社交应用(附邀请)
  • 百度网站收录入口橙色的网站
  • 【LeetCode热题100(39/100)】对称二叉树
  • 卖产品怎么做网站湖北省市政工程建设官方网站
  • SHAP可视化代码详细讲解
  • 网站建设小wordpress2019谷歌字体
  • 赤峰是住房和城乡建设局网站在哪买网站空间
  • 泉州机票网站建设百度搜索 手机
  • 娄底营销型网站建设网站开发招聘 领英
  • 做配资网站网站建设国内外研究现况
  • 泰州公司网站建设网站怎么做才可以做评价