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

在哪几个网站里可以做淘客什么叫关键词举例

在哪几个网站里可以做淘客,什么叫关键词举例,北京 外贸网站建设,wordpress访问缓存一、为什么使用epoll? 1、poll实质是对select的优化,解决了其参数限制的问题,但是其本质还是一个轮询机制。 2、poll是系统调用,当客户端连接数量较多时,会将大量的pollfd从用户态拷贝到内核态,开销较大。…

一、为什么使用epoll?

1、poll实质是对select的优化,解决了其参数限制的问题,但是其本质还是一个轮询机制。

2、poll是系统调用,当客户端连接数量较多时,会将大量的pollfd从用户态拷贝到内核态,开销较大。

3、epoll则不同于select和poll,当客户端连接数量较多时,不会频繁地将客户端fd从用户态拷贝到内核态,而是在内核中维护了一个就绪列表,当某个fd就绪时,内核会将该fd加入到这个就绪列表中,然后epoll_wait只需要从这个就绪列表中去查找是否有事件发生即可,从而提高效率。

二、epoll机制

1、有点类似今天的快递员,菜鸟驿站,用户之间的关系;先创建一个快递员,一个菜鸟驿站还有一个用户总集。

2、当用户需要取包裹时,可以直接去菜鸟驿站进行取包裹;需要邮寄包裹时,同样也可以将包裹放到菜鸟驿站。

3、快递员送快递时,只需把快递放在菜鸟驿站就行,当有包裹需要邮寄时,也是直接从菜鸟驿站取出包裹。避免一个一个的去询问用户。

三、具体实操

1、创建epoll实例

int epfd = epoll_create(1024); //创建一个epoll实例,参数是监听描述符的数量
struct epoll_event ev;
ev.events = EPOLLIN; //监听可读事件
ev.data.fd = socketfd; //监听描述符

2、对用户总集进行操作,增加用户,删除用户,修改用户

epoll_ctl(epfd, EPOLL_CTL_ADD, socketfd, &ev); //将监听描述符加入到epoll实例中

3、告知快递员什么时候去菜鸟驿站

while (true){struct epoll_event events[1024]={0};int nready = epoll_wait(epfd, events, 1024, -1); //等待IO就绪cout<<"nready:"<<nready<<endl;if(nready < 0){                //出错处理cout << "select error:" << strerror(errno) << endl;continue;}//accept操作,此处省略//recv操作,此处省略
}

4、处理包裹

for(int i = 0; i < nready; i++){if(events[i].data.fd == socketfd){       //是否为监听描述符,是那就接收数据=====acceptint clientfd = accept(socketfd, (struct sockaddr *)&clientaddr, &len);cout<<"clientfd:"<<clientfd<<endl;       //获取到客户端的连接描述符ev.events = EPOLLIN | EPOLLERR;    //监听可读事件和错误事件ev.data.fd = clientfd;epoll_ctl(epfd, EPOLL_CTL_ADD, clientfd, &ev);  //将客户端的连接描述符加入到epoll实例中}else if(events[i].events & EPOLLIN){           //判断IO是否可读cout<<"i:"<<events[i].data.fd<<endl;char buffer[1024] = {0};int count = recv(events[i].data.fd, buffer, 1024, 0);if(count == 0){cout<<"client close"<<endl;close(events[i].data.fd);      //关闭客户端的连接描述epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL); //将客户端的连接描述符从epoll实例中删除continue;}cout << "buffer:" << buffer << endl;//返回信息count = send(events[i].data.fd, buffer, count, 0);}
}

在这里插入图片描述

5、小结

epoll主要用到以下几个函数:

struct epoll_event{uint32_t events;    // 事件类型epoll_data_t data;  // 用户数据,可以是fd或者指针
}int epoll_create(int size);
/*
size: 告诉内核监听的数目上限,但是实际上内核并不关心这个值,只要!=0就行,实质是无效参数,主要是为了兼容老版本
return value: 成功返回一个epoll实例的fd,失败返回-1。
*/int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
/*
epfd: epoll实例
op: 操作类型,EPOLL_CTL_ADD(添加)、EPOLL_CTL_DEL(删除)、EPOLL_CTL_MOD(修改)。
fd: 要被操作的客户端fd
event: 事件类型,比如EPOLLIN(可读)、EPOLLOUT(可写)等。
return value: 0表示成功,-1表示失败。
*/int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
/*
epfd: epoll实例
events: 存放就绪事件的数组
maxevents: 数组的最大大小,设置范围
timeout: 超时时间,单位毫秒,-1表示一直等待,0代表表示立即返回,不为0表示等待时间。
return value: 成功返回就绪事件的个数,0表示超时,-1表示出错。* /

四、总结

1、epoll实质上是通过事件驱动的方式来处理IO,不过多关注IO的处理,而是关注事件的处理。

2、相较于select和poll,epoll构建了一个整集,和一个就绪集合,比如有100万个用户整集,但需要操作的就绪集合就1万;就绪才是需要处理的事情,着中关注的就绪集合,而不是整集。

3、epoll提供了边缘触发(ET)和水平触发(LT),边缘触发的特点是,只有当事件发生时才会通知一次,而水平触发则是只要有事件就绪就会一直通知,select和poll则是水平触发。

4、可以通过epoll实现Reactor模式,通过注册事件和回调函数来实现。

5、epoll的存在,是市面上大部分服务器采用Linux做为服务器操作系统的原因之一。

五、拓展问题

1、select,poll,epoll的使用场景?

select: 当系统不支持poll/epoll时,就用select。
poll: 当IO数量较少时,使用poll。
epoll: 当IO数量较多时,使用epoll。

2、整集用什么数据结构?

整集用的是红黑树。

3、就绪集合用什么数据结构?

就绪集合用的是链表。

4、边缘触发和水平触发的区别?

边缘触发:只有当事件发生时才会通知一次;
水平触发:只要有事件就绪就会一直通知。

http://www.dtcms.com/wzjs/798930.html

相关文章:

  • 做养生网站怎么样私人app一键制作器软件
  • 如何做增加网站留存的营销活动统码营销官网
  • 北京企业展示网站建设网站页面图片尺寸
  • 手机网站设计教程搭建电商平台 方案
  • 网站开发人员职业分析中核哪个公司待遇最好
  • WordPress建站经验设计方案ppt模板
  • 免费企业网站建设流程淘宝联盟做返利网站
  • 潍坊专业网站建设怎么收费北京58网站建设
  • 哪个模板建站好在vs中做网站
  • 网站怎么弄实名制认证百度软件下载安装
  • 创建网站是怎么赚钱的网站首页权重
  • 厚街微网站建设网站运维
  • 好看的网站后台模板赤水市白房建设局网站
  • 网页设计与网站建设docxvue做网站的优缺点
  • 中国建筑招聘官方网站网络推广网络营销外包
  • 智能网站推广软件seo优化软件
  • 通辽网站建设tlyltd百度快速排名工具
  • 制作网站公司哪个好旅游网站建设技术有哪些内容
  • 怎么维护好网站网页制作与设计html
  • 做网站推广的企业wordpress个性登录
  • 网站外链建设网站建设前的需求分析
  • 驾校门户网站模板东营集团网站建设
  • 网站仿wordpress容器
  • 搭建网站什么意思公司变更注册资本需要什么资料
  • 天津市政建设集团有限公司网站门户网站的首页模板
  • 政法网站建设有哪些不足wordpress 爬虫 视频教程
  • 网站搭建上海九机手机网官网旗舰店
  • 云南今天刚刚发生的新闻徐州网站推广优化
  • 青岛地产网站建设泉州哪家网站建设公司好
  • 最新的网站搭建工具wordpress常用技巧