我的动机
我喜欢使用FUSE编写分布式文件系统。我还在设计之前设计代码。它可能用C或Go编写,问题是,如何并行处理网络i / o?
我的问题
更具体地说,我希望我的文件系统在本地编写,并让一个线程异步地进行网络开销。如果它在我的情况下稍微延迟并不重要,我只是想避免慢速写入文件,因为代码必须联系某个慢速服务器。
我的理解
我头脑中有两个相互矛盾的想法。一个是FUSE内核模块使用我的程序的ABI来劫持进程并调用我实现的特定FUSE函数名(sync或async,w / e),另一个是..程序正在运行,并阻塞到从内核模块接收事件(我认为不是这样,但我可能是错的)。
无论是什么,这是否意味着我可以简单地启动一个线程并做网络工作?我对它的运作方式有点失落。感谢。
答案 0 :(得分:2)
您不需要进行任何劫持。 FUSE内核模块注册为文件系统提供程序(类型为fusefs)。然后,它通过将它们分派到用户模式进程来服务读/写/打开/等调用。当该进程返回时,内核模块获取返回值,并从相应的系统调用返回。
如果你想通过异步和多线程来拥有服务器(即用户模式进程),你所要做的就是将操作(假设它是写的 - 你不能以这种方式并行输入)分配到另一个线程中该过程,并立即返回FUSE。这样,您的用户模式过程可以在闲暇时写出远程服务器。
您可以类似地尝试并行化读取,但问题是您将无法返回FUSE(从而释放读取过程),直到您至少读取了数据的开头。