linux各种通讯机制汇总
eventfd —— 创建一个文件描述符fd,用于支持事件等待通知机制 , 功能上类似于信号量。
使用场景:当使用pipe仅用于等待/通知功能时,可以使用eventfd替换,代价低,只需要一个文件描述符,而pipe会创建两个文件描述符。相比于信号量,能够支持文件描述符多路复用接口,如poll,select,epoll等。
pipe —— 管道,分为有名管道和匿名管道,有名管道创建一个fifo文件,一个进程往文件里面写数据,一个进程读取数据。写进程用O_WRONLY方式打开,读进程使用O_RDWR打开,这样写进程的打开只有读进程执行了打开后才能打开,否则会阻塞在打开文件接口上,读进程如果设置为O—RDONLY,那么写进程一旦退出,那么读进程read接口一直返回0,不能阻塞,因此使用O—RDWR打开文件。如果读进程单方面退出,那么写进程会产生SIGPIPE信号而退出,因此需要注册SIGPIPE处理函数或忽略该信号,从而在写出错返回值为EPIPE时,加一个1S延时(否则频繁调用写接口并频繁产生信号导致CPU占用很高),待读进程重新恢复后可正常写数据。
赞 (0)