2012-03-12 22 views
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岁,并与它几乎是100S)

这是不是办schedparam或其他什么东西? 希望你们可以给我一些建议,比如我需要检查的东西。

再次感谢。

回答

3

你的线程是忙等待,这意味着它会尽可能多地使用CPU的能力。您可能需要在线程中添加一点延迟以让其他线程和进程也可以运行:

while (1) 
{ 
    usleep(1000); /* Sleep for one millisecond */ 
} 
+0

我还将此测试函数添加到fuse examples/fusexmp.c并运行良好。我认为这是因为它运行速度非常快,不需要下一次幻灯片。感谢您的详细信息。 – bxshi 2012-03-12 08:12:32