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

抖音短剧推广平台有哪些株洲seo优化加盟

抖音短剧推广平台有哪些,株洲seo优化加盟,wordpress主题开发时间,建设公司是什么意思epoll介绍epoll的行为与poll(2)相似#xff0c;监视多个有IO事件的文件描述符。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外#xff0c;还提供了边缘触发(Edge Triggered)#xff0c;这就使得用户空间程序有可能缓存IO状态#xff0c;减少epoll_wait…epoll介绍epoll的行为与poll(2)相似监视多个有IO事件的文件描述符。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外还提供了边缘触发(Edge Triggered)这就使得用户空间程序有可能缓存IO状态减少epoll_wait/epoll_pwait的调用提高应用程序效率。epoll_create(2) 创建一个新的epoll实例并返回一个引用该实例的文件描述符epoll_ctl(2) 创建epoll实例后注册对感兴趣的文件描述符。当前注册在epoll实例上的文件描述符集被称为epoll集合。epoll_wait(2) 等待I/O事件如果当前没有事件可用则阻塞调用线程。水平触发和边沿触发epoll事件分布接口既可以表现为边缘触发(ET)也可以表现为水平触发(LT)。这两种机制的区别可以这样描述。假设有这种情况发生:表示管道(rfd)的读侧的文件描述符在epoll实例上注册。管道写入器在管道的写入端写入2 kB的数据。调用epoll_wait(2)将返回rfd作为就绪文件描述符。管道读取器从rfd读取1kb的数据。epoll_wait(2)调用完成。如果使用边缘触发标志将rfd文件描述符注册到epoll接口那么第五步的epoll_wait(2)的调用可能会挂起尽管文件输入缓冲区仍然有1kb数据可读同时远程对等端可能正在期望基于它已发送的数据的应答。这样做的原因是只有在被监视文件描述符上发生更改时边缘触发模式才交付事件。因此在步骤5中调用者可能会以等待那些仍在输入缓冲区中的数据的状态下结束。在上面的例子中将生成rfd上的一个事件因为在2中完成了写入而在3中使用了该事件。由于在4中完成的读操作不会消耗整个缓冲区数据所以在步骤5中完成的对epoll_wait(2)的调用可能会无限期阻塞。使用EPOLLET标志的应用程序应该使用非阻塞文件描述符以避免在处理多个文件描述符时出现有阻塞的读写饥饿任务。建议使用epoll作为边沿触发(EPOLLET)接口的方式如下:i、 具有非阻塞文件描述符ii、只有在read(2)或write(2)返回EAGAIN后才等待事件。相反当EPOLLET作为水平触发接口使用时(默认情况下没有指定EPOLLET) epoll只是一个更快的poll(2)并且可以在使用后者的任何地方使用因为它具有相同的语义。Epoll的优点1、支持一个进程打开大数目的socket描述符(FD)select能打开的文件描述符有一定的限制FD_SETSIZE设置默认值是2048有两种解决方法1、修改它的值然后重新编译内核。2、使用多进程加入要并发20w个客户那么就要开100进程epoll则没有这个限制它所支持的FD上限是最大可以打开文件的数目这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是2万左右具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。2、IO效率不随FD数目增加而线性下降select/poll采用轮询的方式扫描文件描述符文件描述符数量越多性能越差内核 / 用户空间内存拷贝问题select/poll需要复制大量的句柄数据结构产生巨大的开销select/poll返回的是含有整个句柄的数组应用程序需要遍历整个数组才能发现哪些句柄发生了事件导致效率呈现线性下降。但是epoll不存在这个问题它只会对活跃的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。3、支持边缘触发模式select/poll的触发方式是水平触发应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作那么之后每次select/poll调用还是会将这些文件描述符通知进程。4、使用mmap加速内核与用户空间的消息传递。select/poll和epoll都需要内核把FD消息通知给用户空间如何避免不必要的内存拷贝很重要在这点上select/poll需要复制整个FD数组产生巨大的开销而epoll是通过内核于用户空间mmap同一块内存实现的。epoll的系统调用epoll_createint epoll_create(int size);int epoll_create1(int flags);创建一个epoll的句柄。自从linux2.6.8之后size参数是被忽略的更推荐使用epoll_crete1(0)来替代flags可以设置EPOLL_CLOEXEC标志epoll_ctl#include int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);该系统调用对文件描述符epfd引用的epoll(7)实例执行控制操作。它请求对目标文件描述符fd执行操作op。epfd : epoll_create创建的文件描述符.op 参数的有效参数为:EPOLL_CTL_ADD在文件描述符epfd引用的epoll实例上注册目标文件描述符fd。EPOLL_CTL_MOD修改已注册描述符fd关联的事件。EPOLL_CTL_DEL从epfd引用的epoll实例中删除(取消注册)目标文件描述符fd。该事件将被忽略并且可以是NULLfd 待监听的fdepoll_event : 描述链接到文件描述符fd的对象它的定义如下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 关联的文件描述符可以读(包括对端SOCKET正常关闭)EPOLLOUT关联的文件描述符可以写EPOLLPRI关联的文件描述符有紧急的数据可读(这里应该表示有带外数据到来)EPOLLERR关联的文件描述符发生错误EPOLLHUP关联的文件描述符被挂断EPOLLRDHUP流套接字对等关闭连接或半关闭写。(当使用边缘触发监视时此标记对于编写简单代码检测对等端是否关闭特别有用。2.6.17引入)EPOLLET 将EPOLL设为边缘触发(Edge Triggered)模式这是相对于水平触发(Level Triggered)来说的。EPOLLONESHOT只监听一次事件当监听完这次事件之后如果还需要继续监听这个fd的话需要再次把这个fd加入到EPOLL队列里它们在内核头文件里的定义如下3334 enum EPOLL_EVENTS35 {36 EPOLLIN 0x001,37 #define EPOLLIN EPOLLIN38 EPOLLPRI 0x002,39 #define EPOLLPRI EPOLLPRI40 EPOLLOUT 0x004,41 #define EPOLLOUT EPOLLOUT42 EPOLLRDNORM 0x040,43 #define EPOLLRDNORM EPOLLRDNORM44 EPOLLRDBAND 0x080,45 #define EPOLLRDBAND EPOLLRDBAND46 EPOLLWRNORM 0x100,47 #define EPOLLWRNORM EPOLLWRNORM48 EPOLLWRBAND 0x200,49 #define EPOLLWRBAND EPOLLWRBAND50 EPOLLMSG 0x400,51 #define EPOLLMSG EPOLLMSG52 EPOLLERR 0x008,53 #define EPOLLERR EPOLLERR54 EPOLLHUP 0x010,55 #define EPOLLHUP EPOLLHUP56 EPOLLRDHUP 0x2000,57 #define EPOLLRDHUP EPOLLRDHUP58 EPOLLEXCLUSIVE 1u 28,59 #define EPOLLEXCLUSIVE EPOLLEXCLUSIVE60 EPOLLWAKEUP 1u 29,61 #define EPOLLWAKEUP EPOLLWAKEUP62 EPOLLONESHOT 1u 30,63 #define EPOLLONESHOT EPOLLONESHOT64 EPOLLET 1u 3165 #define EPOLLET EPOLLET66 };676869 /* Valid opcodes ( op parameter ) to issue to epoll_ctl(). */70 #define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */71 #define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */72 #define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */epoll_wait#include int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);int epoll_pwait(int epfd, struct epoll_event *events,int maxevents, int timeout,const sigset_t *sigmask);等待在epoll监控的事件中已经发生的事件。epfd : epoll_create() 的返回值.events : 分配好的epoll_event结构体数组epoll将会把发生的事件赋值到events数组中(events不可以是空指针内核只负责把数据复制到这个events数组中不会去帮助我们在用户态中分配内存)maxevents : maxevents告知内核这个events有多大这个 maxevents的值大于0(否则Error Invalid argument)timeout : 超时时间(毫秒0会立即返回-1将不确定也有说法说是永久阻塞)。如果函数调用成功返回对应I/O上已准备好的文件描述符数目如返回0表示已超时它会阻塞直到一个文件描述符有事件发生;信号处理器中断;超时;epoll示例程序此程序简单测试一下三个API注册标准输出的描述符到epoll监视标准输出的读事件触发后回显一遍quit退出程序.#include #include #include #include #include #include #include #include #include typedef std::vector PollFdList;int main(int argc ,char **argv){int fd;char buf[1024];int i,res,real_read, maxfd;if((fdopen(/dev/stdin,O_RDONLY|O_NONBLOCK)) 0){fprintf(stderr,open data1 error:%s,strerror(errno));return 1;}PollFdList m_pollfds;int epfd epoll_create1(EPOLL_CLOEXEC);struct epoll_event ev;ev.events EPOLLIN | EPOLLPRI;ev.data.fd fd;epoll_ctl(epfd, EPOLL_CTL_ADD, fd, ev);m_pollfds.resize(1024);while(1){int ret epoll_wait(epfd, m_pollfds.data(), m_pollfds.size(), 5000);if (ret 0){printf(ePoll error : %s\n,strerror(errno));return 1;}if(ret 0){printf(ePoll timeout\n);continue;}for (i 0; i 1; i){if (m_pollfds[i].events EPOLLIN){memset(buf, 0, 1024);real_read read(m_pollfds[i].data.fd, buf, 1024);if (real_read 0){if (errno ! EAGAIN){printf(read eror : %s\n,strerror(errno));continue;}}else if (!real_read){close(m_pollfds[i].data.fd);m_pollfds[i].events 0;}else{if (i 0){buf[real_read] \0;printf(%s, buf);if ((buf[0] q) || (buf[0] Q)){printf(quit\n);return 1;}}else{buf[real_read] \0;printf(%s, buf);}}}}}exit(0);}./testhellohellohello epollhello epollePoll timeoutquitquitquit
http://www.sadfv.cn/news/278997/

相关文章:

  • 做我的世界背景图的网站门户网页
  • 企业开展网站建设软件工程师月薪
  • 门户网站 建设 如何写网上平面设计培训
  • 市网站建设公司宿迁房产网查备案
  • 网站建站的技术解决方案模拟登录wordpress
  • 购物网站建设机构网页布局设计说明
  • 餐饮手机微网站怎么做做网站分前台后端吗
  • 大连网站制作的公司成都专业网站建设公司排名
  • 做网站服务好中国建设银行官网站积分抽奖
  • 做图模板网站有哪些内容展示型网站建设报价
  • 购物券网站怎么做软装公司排名前十强
  • 重庆网站制作那家好wordpress the7教程
  • 旅游网站建设与翻译wordpress 爬
  • 站长网站素材网页页面下载
  • 简单的个人主页网站制作wordpress如何销售卡密
  • 网站空间换了 使用原有域名福步外贸官网
  • 用mediawiki做的网站哈尔滨网站建设贴吧
  • 东莞企慕网站建设什么装修网站做的好的
  • 建设银行网站不能建行转他行了西宁制作网站需要多少钱
  • 重庆餐饮网站设计公司响应式网站建设报价
  • 南昌做网站比较好的公司广州注册公司核名在哪个网站
  • 免费建立网站论坛罗湖做网站哪家好
  • 站长工具传媒自己怎么做网站链接
  • 计算机编程代码大全优化关键词技巧
  • 三明市住房与建设局网站网站建设所需
  • diy网站营销案例100例简短
  • 网站分页效果wordpress _the_logo
  • 在局网站 作风建设佛山建网站定制
  • 十大搞笑素材网站视频生成链接
  • 河南微网站建设公司深圳seo优化公司搜索引擎优化方案