我的动机
我很想使用 FUSE 编写一个分布式文件系统。在开始之前我仍在设计代码。它可能会用 C 或 Go 编写,问题是,我如何并行处理网络 I/O?
我的问题
更具体地说,我希望我的文件系统在本地写入,并让一个线程异步执行网络开销。在我的情况下,如果稍微延迟也没关系,我只是想避免缓慢写入文件,因为代码必须联系某个地方的一些慢速服务器。
我的理解
我脑子里有两个相互冲突的想法。一个是FUSE内核模块使用我的程序的ABI来劫持进程并调用我实现的特定FUSE函数名称(同步或异步,w/e),另一个是..程序正在运行,并且阻塞到从内核模块接收事件(我不认为是这种情况,但我可能是错的)。
无论它是什么,这是否意味着我可以简单地启动一个线程并执行网络操作?我有点不知道它是如何工作的。谢谢。
最佳答案
您不需要进行任何劫持。 FUSE 内核模块注册为文件系统提供程序(类型为fusefs)。然后,它通过将读/写/打开等调用分派(dispatch)到用户模式进程来为它们提供服务。当该进程返回时,内核模块获取返回值,并从相应的系统调用中返回。
如果你想让服务器(即用户模式进程)通过异步和多线程,你所要做的就是将操作(假设它是写的 - 你不能以这种方式并行化输入)分派(dispatch)到另一个线程该过程,并立即返回到 FUSE。这样,您的用户模式进程就可以在闲暇时向远程服务器写入数据。
您可以类似地尝试并行化读取,但这里的问题是,在至少读取数据的开头之前,您将无法返回 FUSE(从而释放读取过程)。
关于linux - FUSE 文件系统的并行网络 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16137298/