非阻塞本机文件访问-C中的单线程守护进程?

非阻塞本机文件访问-C中的单线程守护进程?,c,multithreading,daemon,nonblocking,C,Multithreading,Daemon,Nonblocking,我发现本机文件访问没有非阻塞状态。我说的对吗 我一直在谷歌上搜索非阻塞的守护进程,我发现了一个通过线程化文件访问操作实现上述行为的守护进程,这样守护进程就不会阻塞 我的问题是,线程化和IPC’ing这样的操作不是很昂贵吗?这不是更有意义吗 一个线程前池,只需让每个客户端位于一个线程上,并让它阻塞可能需要的阻塞操作。或者 B在文件访问阻塞的情况下,使用一个相对较小的缓冲区,这样它仍然会阻塞-但是人们会认为,一个用于多个操作的小缓冲区比为每个操作和IPC线程化付出代价更有意义?如果使用线程化,则需要

我发现本机文件访问没有非阻塞状态。我说的对吗

我一直在谷歌上搜索非阻塞的守护进程,我发现了一个通过线程化文件访问操作实现上述行为的守护进程,这样守护进程就不会阻塞

我的问题是,线程化和IPC’ing这样的操作不是很昂贵吗?这不是更有意义吗 一个线程前池,只需让每个客户端位于一个线程上,并让它阻塞可能需要的阻塞操作。或者


B在文件访问阻塞的情况下,使用一个相对较小的缓冲区,这样它仍然会阻塞-但是人们会认为,一个用于多个操作的小缓冲区比为每个操作和IPC线程化付出代价更有意义?

如果使用线程化,则需要很少的IPC开销。所有线程都有相同的内存空间,因此可能只需要一个简单的互斥或信号量。现在,如果您阻塞互斥锁或信号量的时间太长或太频繁,那么首先为什么要使用异步I/O呢

至于由执行I/O的线程执行的实际计算,它们大部分时间都在等待内核唤醒它们,所以我不必担心

如果您的应用程序将围绕读取文件和其他I/O源展开,那么您可能需要阅读Reactor模式和事件驱动编程

另外,您还提到了一个守护进程和服务客户机。如果您提供的服务是读取文件,那么生成一个新线程来为每个客户机服务的计算成本是最小的,因为每个线程完成请求都需要很长时间,而且大部分时间都会阻塞。如果你的客户端数达到数千,可能会出现内存问题,但我认为你不会有问题


让我们更详细地了解一下您想要做什么,也许有更直接的方法。

通常使用所用系统上可用的C库。对于“非阻塞”文件访问,通常使用select、poll、epoll等来完成。这些资源的可用性取决于system/C运行时。您确定这是本机文件的选项吗?不是FIFO,也不是套接字。不幸的是,我找不到任何相关的,如果你能分享一个具体的参考,将非常感谢!这不是普通文件的选项,select/poll始终会将此类文件报告为始终可读/始终可写。-这一提法与我的问题有关联。我认为运行一个单线程HTTP守护进程是有意义的,但是如果您为每个文件访问操作支付一个线程,那么我看不出这有什么意义。我错过了什么?他们为什么选择这条路?