1

我的动力

我很想用 FUSE 写一个分布式文件系统。在我开始之前,我仍在设计代码。它可能用 C 或 Go 编写,问题是,我如何并行处理网络 i/o?

我的问题

更具体地说,我希望我的文件系统在本地写入,并让一个线程异步处理网络开销。在我的情况下是否稍微延迟都没关系,我只是想避免缓慢写入文件,因为代码必须在某处联系一些慢速服务器。

我的理解

我脑子里有两个想法冲突。一是FUSE内核模块使用我程序的ABI劫持进程,调用我实现的具体FUSE函数名(sync or async, w/e),二是..程序正在运行,阻塞到从内核模块接收事件(我不认为是这种情况,但我可能是错的)。

不管是什么,这是否意味着我可以简单地启动一个线程并做网络工作?我对它的工作原理有点迷茫。谢谢。

4

1 回答 1

2

你不需要做任何劫持。FUSE 内核模块注册为文件系统提供程序(类型为 fusefs)。然后它通过将它们分派到用户模式进程来服务读/写/打开/等调用。当该进程返回时,内核模块获取返回值,并从相应的系统调用中返回。

如果您想通过异步和多线程来拥有服务器(即用户模式进程),您所要做的就是将操作(假设它是写入 - 您不能以这种方式并行化输入)分派到该进程中的另一个线程,并立即返回 FUSE。这样,您的用户模式进程可以在闲暇时向远程服务器写出。

您可以类似地尝试并行读取,但这里的问题是您将无法返回 FUSE(并因此释放读取过程),直到您至少开始读取数据。

于 2013-04-22T02:17:30.503 回答