我发现本机文件访问没有“非阻塞”状态。 (我是对的?)
我一直在谷歌搜索“非阻塞”的守护进程,我找到了一个通过线程文件访问操作实现所述行为的守护进程,以便该守护进程不会阻塞。
我的问题是,不会进行线程化和IPC这样的操作会相当昂贵吗?这两种方式都没有意义: A)预先线程池,只需让每个客户端都在一个线程上,让它阻塞它可能需要的阻塞操作。或者,
B)在文件访问阻塞的情况下,使用相对较小的缓冲区,这样它仍然会阻塞 - 但是人们会认为用于多个操作的微小缓冲区比支付线程化每个操作和IPC的价格更有意义?
答案 0 :(得分:0)
如果使用线程,则需要很少的IPC开销。您拥有所有线程的相同内存空间,因此您可能只需要一个简单的互斥锁或信号量。现在,如果您长时间或太频繁地阻塞互斥锁或信号量,为什么首先使用异步I / O?
对于执行I / O的线程执行的实际计算,它们正在等待内核在大多数时间唤醒它们,所以我不担心。
如果您的应用程序将围绕读取文件和其他I / O源,您可能需要阅读Reactor模式和事件驱动编程。
此外,您提到了一个守护程序,并为客户端提供服务。如果您提供的服务是读取文件,那么产生新线程以服务每个客户端的计算成本是最小的,因为每个单独的线程将花费很长时间来完成请求,并且无论如何都会阻塞大部分时间。如果您的客户数量达到数千,可能会出现内存问题,但我认为您会做得很好。
给我们一些关于你想做什么的更多细节,也许有更简单的方法。