c - readdir_r 弃用的性能影响?
问题描述
当我在新工作站上重新编译 FUSE 文件系统时,我注意到有关readdir_r
. 由于readdir
不是 MT Safe 并且需要自己的同步,我有点困惑。
我不确定究竟什么不是 MT Safe - 它是readdir
单独的还是读取某个目录直到结束的整个过程?似乎该标准试图通过指出readdir
如果在不同的目录上调用它是 MT 安全的,但如果您的“程序”是多用户覆盖 FUSE 文件系统,这显然是不安全的假设来证明这一决定的合理性。那么我应该将整个目录读取过程放在关键部分还是单独readdir
调用?
老实说,从性能的角度来看,这两种情况对我来说听起来都很糟糕——我的担忧是否有效,或者 Linux 内核中是否存在其他一些瓶颈,使得无论如何都不可能通过多个进程/线程对单个目录执行并行读取?
解决方案
在当前的 POSIX.1 规范 (POSIX.1-2008) 中,readdir(3) 不需要是线程安全的。但是,在现代实现(包括 glibc 实现)中,对指定不同目录流的 readdir(3) 的并发调用是线程安全的。
手册页说它是线程安全的(假设您使用的是 glibc,我认为这在 Linux 上是一个公平的假设)——前提是您使用不同的目录流——而不是不同的目录。
目录流是 readdir 的 DIR * 参数。
推荐阅读
- ios - iTunesconnect 移除 tvOS 版本
- c# - 在 Entity Framework Core 中使用两列的一对多关系
- javascript - Why isn't this onmouseover function is not working?-"Cannot read property 'display' of undefined"
- c++ - 关于模板标题过多的警告
- assembly - 如何将 asm 着色器编译为 fxo 文件?
- javascript - 如何在标签内附加 SVG 圆圈
- java - 如何解密p7s文件
- neural-network - 神经网络 - 每个元素多列(Pytorch)
- python - NCBIblastP 命令行错误
- sms - Twilio 消息段