2012-03-12 21 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