在 Linux 上,在 C/C++ 程序中,如果我不关心我的 eventfd 是否被用于“select”,那么使用 eventfd_read/write(带有 EFD_SEMAPHORE 标志)还是 sem_wait/post 更好?
- 是否存在任何性能、可靠性和可移植性问题?
- 由于我的程序使用了一些其他的 eventfd 对象(带有“select”),我认为使用 eventfd 比使用 sem_wait/post 更一致。
最佳答案
sem_wait
/sem_post
完全是用户空间,除非 sem_wait
block 或 sem_post
发布到具有服务员。即使那样,它们执行的系统调用也是内核中一些最快的路径。
另一方面,任何使用文件描述符和 io 进行同步的东西都充满了系统调用,由于 io 的巨大复杂性,它们是内核中最慢的一些路径。
如果您不需要 select 并且无论如何您正在编写多线程或多进程代码,我认为选择使用信号量而不是 eventfd 是一个明智的选择(即对于那些不熟悉俚语的人来说,这是显而易见的选择).
关于c++ - eventfd_read/write 与 sem_wait/post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826919/