精华内容
下载资源
问答
  • select poll epoll

    2018-07-30 19:03:10
    select poll epoll 等简单使用demo。各自之前区别等。
  • select poll epoll 代码实例
  • Select-Poll-Epoll-small-demo:SelectPollEpoll小演示
  • 下面小编就为大家带来一篇IO复用之select poll epoll的总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • select poll epoll
    展开全文
  • select poll epoll 浅析

    2018-02-05 17:40:00
    select poll epoll 浅析 reference: http://blog.csdn.net/jiange_zh/article/details/50811553 1, 三者可以对多个文件描述符进行监听,当ready后可以进行预期的IO操作; 2, select可以处理的event是read/...

    select poll epoll 浅析

    reference:

    http://blog.csdn.net/jiange_zh/article/details/50811553

     

    1, 三者可以对多个文件描述符进行监听,当ready后可以进行预期的IO操作;

    2, select可以处理的event是read/write ready,poll可以处理更加复杂的event POLLIN/POLLOUT(相对于select的readfds,writefds ready)/POLLPRI/POLLRDHUP/POLLERR/POLLHUP/POLLNVAL, epoll在poll的基础上,增加了EPOLLET (edge trigger 边沿触发)和EPOLLONESHOT;

    3, select/poll比epoll的效率低,随着fd数量的增加,对比越明显。select/poll每一次poll都会在kernel space遍历所有的文件描述符,epoll是在设备ready(粗略理解成fd ready)后通过回调函数将此fd放到就绪链表中,每次poll将此链表返回;

     

    epoll的优势:

    1, 在大型服务器上,数以千计的fd需要快速响应,epoll的时间复杂度比select/poll高出数量级,空间复杂度的影响可以忽略;

    2, epoll可以通过epoll_ctl函数动态添加/修改/删除,对于不能预期的fd,比较容易添加到poll队列中;(select和poll也可以通过编程手段实现这一点,但自身支持会简化使用场景)

    select:

    #include <stdio.h>
    #include <string.h>
    #include <sys/select.h>
    
    int main(void)
    {
        int maxfd = 0;
        int ret = -1;
        fd_set rfds;
        struct timeval tv;
        char buf[1024] = {0x0};
    
        printf("select testing.\n");
    
        while(1)
        {
            FD_ZERO(&rfds);
            FD_SET(0, &rfds);
            maxfd = 1; /* maxfd = fd + 1*/
            tv.tv_sec = 0;
            tv.tv_usec = 100*1000; /* 100ms. */
            ret = select(maxfd, &rfds, NULL, NULL, &tv);
            if (ret == 0x0)
            {
                //printf("time out.\n");
                continue;
            }
            else if (ret < 0x0)
            {
                perror("select:");
                continue;
            }
            else
            {
                if(FD_ISSET(0, &rfds))
                {
                    memset(buf, 0x0, sizeof(buf));
                    ret = read(0, buf, sizeof(buf));
                    if(0x0 == strncmp(buf, "quit", 4))
                        return 0x0;
                    printf("buf:%s", buf);
                }
            }
        }
        
        return 0x0;
    }

     

    poll:

    #include <stdio.h>
    #include <poll.h>
    #include <errno.h>
    #include <string.h>
    
    int main(void)
    {
        struct pollfd pfd;
        int ret = -1;
        char buf[1024] = {0x0};
        
        printf("poll testing.\n");
        
        memset(&pfd, 0x0, sizeof(pfd));
        
        pfd.fd = 0;
        pfd.events = POLLIN;
        
        while(1)
        {
            ret = poll(&pfd, 1, 100);
            if(ret == -1 && errno == EINTR)
                continue;
    
            if(ret < 0)
                perror("poll:");
    
        if(ret == 0x0)
        {
            //printf("time out!\n");
            continue;
        }
    
            if(pfd.revents & POLLIN)
            {
                ret = read(pfd.fd, buf, sizeof(buf));
                printf("buf:%s");
                if(0x0 == strncmp("quit", buf, 4))
                    return 0x0;
            }
        }
    
        return 0x0;
    }

     

    epoll:

    #include <stdio.h>
    #include <string.h>
    #include <sys/epoll.h>
    
    #define MAX_EVENTS (10)
    
    int main(void)
    {
        int epfd = -1;
        int ret = -1;
        int fd = -1;
        int i = 0;
        struct epoll_event ev;
        struct epoll_event revs[MAX_EVENTS];
        char buf[1024] = {0x0};
    
        printf("epoll testing\n");
        
        epfd = epoll_create(1);
        if(epfd < 0x0)
        {
            perror("epoll_create:");
            return -1;
        }
        
        memset(&ev, 0x0, sizeof(ev));
        ev.data.fd = 0;
        ev.events  = EPOLLIN;
        epoll_ctl(epfd, EPOLL_CTL_ADD, 0, &ev);
        
        while(1)
        {
            memset(&revs, 0x0, sizeof(revs));
            ret = epoll_wait(epfd, &revs[0], MAX_EVENTS, 10);
            switch(ret)
            {
                case 0:
                {
                    //printf("time out!\n");
                    break;
                }
    
                case -1:
                {
                    perror("epoll_wait:");
                    break;
                }
    
                default:
                {
                    for(i = 0; i < ret; i++)
                    {
                        fd = revs[i].data.fd;
                        if(revs[i].events & EPOLLIN)
                        {
                            memset(buf, 0x0, sizeof(buf));
                            ret = read(fd, buf, sizeof(buf));
                            if(0x0 == strncmp(buf, "quit", 4))
                                return 0x0;
                            printf("buf:%s", buf);
                        }
                    }
                }
            }
        }
        
        return 0x0;
    }

     

    转载于:https://www.cnblogs.com/tangtangworld/p/select-poll-epoll.html

    展开全文
  • select poll epoll的区别

    2016-09-21 11:15:39
    select poll epoll都是I/O复用的机制
    select poll epoll都是I/O复用的机制
    展开全文
  • 扎心了,不表。还是捋一下,很基础 1.select poll epoll

    扎心了,不表。还是捋一下,很基础

    1.select  poll epoll

     

     

    2.golang语言对三者的对接的实现

     

    展开全文
  • 分别是select poll epoll

    2017-03-13 16:43:08
    说到Linux下的IO复用,系统提供了三个系统调用,分别是select poll epoll。那么这三者之间有什么不同呢,什么时候使用三个之间的其中一个呢?  下面,我将从系统调用原型来分析其中的不同。   二、系统接口原型...
  • Select poll epoll 总结 摘要 先明确几个概念: 面试官问:给我讲讲什么事同步阻塞、异步阻塞、同步非阻塞、异步非阻塞。 我:????? 同步和异步的概念  同步是指用户线程发起IO请求后,需要等待或者...
  • Linux IO模式及select poll epoll多路复用 参考文章: https://segmentfault.com/a/1190000003063859 本文原址:https://htmonster.xyz/blog/post/linux_io 文件描述符fd 一个用于表述指向文件引用的抽象化概念 ...
  • 基础知识 同步、异步 进程的阻塞 理解 IO操作 Unix下可用的5种I/O模型 同步阻塞 IO 同步非阻塞 IO ...select poll epoll的区别 基础知识 高性能架构设计主要有两方面: 1.提高单服务器...
  • select poll epoll详解

    2020-12-19 16:32:30
    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,selectpoll的用武之地越来越有限,风头已经被...
  • select poll epoll 区别

    万次阅读 2020-05-08 09:57:48
    理论知识: selectpollepoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但selectpollepoll...
  • select poll epoll 总结

    2018-06-15 11:48:53
    epoll_ctl通过(EPOLL_CTL_ADD、EPOLL_CTL_MOD、EPOLL_CTL_DEL)三个操作来分散对需要监控的fds集合的修改,做到了有变化才变更,将selectpoll高频、大块内存拷贝(集中处理)变成epoll_ctl的低频、小块内存的拷贝...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,829
精华内容 15,931
关键字:

selectpollepoll