在用strace分析未知程序时,发现线程间通讯使用了pipe,pipe本身非常简单,通过调用pipe(int fd[2])得到两个fd,fd[1]用于向管道写入,fd[0]用于读用于读取被写入管道的内容,在read(fd[0])时,本身会阻塞,直到有东西被写入管道,但我发现这个程序中一个线程向管道写入以后,先是唤醒了另一个线程的epoll然后再去读管道,所以不解为什么不直接read等待返回,而一定要介入epoll?进一步理清epoll的作用才知道,因为尽管时一个线程其可能也要处理多个事件,比如event等,所以需要epoll来统一注册回调,哪个事件到了就处理哪个事件,而不是只等在管道read()上。
pipe为什么要结合epoll使用
最新推荐文章于 2024-03-04 16:04:30 发布