zoukankan      html  css  js  c++  java
  • I/O复用

    1、I/O模型  

    一个输入操作通常包括两个不同阶段:等待数据准备好;从内核到进程拷贝数据。

    阻塞I/O模型

    非阻塞I/O模型

    I/O复用模型:内核发现进程指定的一个或多个I/O条件就绪,它就通知进程,由select和poll两个函数支持

    信号驱动I/O模型:内核在描述字就绪时发送SIGIO信号通知进程

    异步I/O模型:让内核启动一个操作,并在整个操作完成后通知进程

    2、select函数

    #include <sys/select.h>

    #include <sys/time.h>

    int select (int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *expectset, const struct timeval *timeout)

    select函数指定一系列描述字,在一个描述字就绪或者等待指定时间后返回,返回所有已就绪的描述字个数

    参数timeout指定最长等待时间,为NULL时,函数将一直等待直到有描述子就绪

    参数readset、writeset和expectset指定让内核测试的读、写和异常条件描述字。这三个参数的类型时描述字集fd_set,可以

    通过下面4个宏来操作:

    void FD_ZERO (fd_set *fdset)

    void FD_SET (int fd,fd_set *fdset)

    void FD_CLR (int fd, fd_set *fdset)

    int FD_ISSET (int fd, fd_set *fdset)        //判断fdset描述字集中的fd描述字是否就绪

    select函数修改由readset、writeset和expectset所指向的描述字集,这三个参数是值-结果参数,调用函数时,指定所关心的描述字,

    返回时,指示就绪的描述字。因此,当重新调用select函数时,必须重新设置描述字集

    maxfdp1的值是最大描述字加1

    生活不止眼前的苟且 还有诗和远方的田野
  • 相关阅读:
    Kafka文件存储机制那些事(转发)
    Kafka文件存储机制那些事(转发)
    消息队列设计精要(转发)
    RocketMQ原理解析-Broker(转发)
    Apache Kafka:下一代分布式消息系统(转发)
    新浪技术分享:我们如何扛下32亿条实时日志的分析处理(转发)
    消息队列技术介绍(转发)
    confluent kafka for .net
    kafka参考资料
    kafka架构(转发)
  • 原文地址:https://www.cnblogs.com/jc-nogame/p/4351870.html
Copyright © 2011-2022 走看看