- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在我的程序中读取异步磁盘。
服务器上有很多硬盘,如果一个硬盘慢,程序就会阻塞。我想进行异步调用。
如果我调用:
打开(路径,O_NONBLOCK | O_RDONLY | O_DIRECT)
然后 pread,然后 pread 使用最多 8000 微秒,但会阻塞我的程序。
是否可以在没有线程池的情况下启用异步磁盘读取?
最佳答案
O_NONBLOCK
标志对普通文件没有任何影响(至少在大多数情况下),因为它们不被认为是 I/O 可以阻塞的东西 - 是的,它会阻塞从磁盘读取数据所花费的时间长度,但它不会像套接字或管道那样无限期地阻塞。
一个异常(exception)是当启用强制锁定时 - 然后对锁定区域的读取或写入可能会无限期阻塞(直到锁定被释放)并且 O_NONBLOCK
将影响此类调用的行为方式。
至于异步I/O是否可以不用线程,答案是可以(见aio(7)
或io_setup(2)
,io_submit( 2)
和 friend 们),但如果您从中看到很多好处,我会感到惊讶。
关于Linux open(path, O_NONBLOCK | O_RDONLY | O_DIRECT) block 在文件上预读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808310/
我正在处理文件状态标志。 在我进行的测试中,我发现 #include #include "fcntl.h" int main() { const int flag = O_RDONLY;
我正在根据我在某些元文件中设置的权限检查发送到 open(2) 调用的标志。这里的 perms 与通常发送给 chmod 等调用的八进制值有关。我希望在 perms 与相关标志不匹配时输入 if bl
在我的简单程序中: #include #include #include #include using namespace std; int main(int argc, char *argv
使用函数 Open() 或 OpenFile(path, os.O_RDONLY) 后我可以读取文件,但之后无法删除文件。所以我尝试使用写标志 os.RDWR 打开文件,如下面的代码,看看我是否可以删
我目前正在从以下网站学习现代 OpenGl:http://www.arcsynthesis.org/gltut/Building%20the%20Tutorials.html . 不幸的是,当我按照说
是否可以从 nodejs 访问操作系统常量 O_RDONLY、O_WRONLY、O_APPEND 等的值? 我知道它们在所有平台上都不一样,所以正确的方法是使用常量而不是依赖我当前系统中的硬编码值。
我正面临标题所说的确切问题。 代码 pid_t childpid; int childfdRead, childfdWrite; // file descriptors for childs int
我想在我的程序中读取异步磁盘。 服务器上有很多硬盘,如果一个硬盘慢,程序就会阻塞。我想进行异步调用。 如果我调用: 打开(路径,O_NONBLOCK | O_RDONLY | O_DIRECT) 然后
我正在尝试调试为什么我的 PHP 使用如此多的 CPU。 像这样运行 strace 后: strace -e open,close php /scripName.php 它向我显示了它使用的所有文件,
我是一名优秀的程序员,十分优秀!