1

我正在开发一个基于 FUSE 的文件系统项目。我想添加一些预先阅读的内容。所以我创建了一个线程来处理这样的任务,但似乎我让它比我想象的要慢。(即使我只是添加一个空闲线程,它也会让我的程序变得比没有它慢得多,但这并没有发生当我将此功能添加到我的服务器程序时,不使用保险丝)

我没有简单地使用 fuse_main 函数,而是阅读了 sshfs 的代码并尝试使用以下函数自己初始化它,

fuse_parse_cmdline
fuse_mount
fcntl
fuse_new
fuse_daemonize
fuse_set_signal_handlers
fuse_loop_mt

并且没有添加线程,它运行得很好,但是在我添加这个线程之后

pthread_create(&tid, NULL, test, NULL); // function test is just a while(1){}

它变慢了(读取一个 100M 的文件,没有这个线程它是 40 秒,而它接近 100 秒)

这与 schedparam 或其他有关吗?希望大家能给我一些建议,比如我需要检查什么。

再次感谢。

4

1 回答 1

3

您的线程正忙于等待,这意味着它将使用尽可能多的 CPU 资源。您可能希望在线程中添加一点延迟,以让其他线程和进程也运行:

while (1)
{
    usleep(1000);  /* Sleep for one millisecond */
}
于 2012-03-12T07:25:31.177 回答