【问题标题】:How to add thread correctly in fuse如何在保险丝中正确加线
【发布时间】:2012-03-12 15:25:31
【问题描述】:

我正在开发一个基于 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的文件,没有这个线程是40s,有这个是将近100s)

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

再次感谢。

【问题讨论】:

    标签: c linux fuse


    【解决方案1】:

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

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

    【讨论】:

    • 我还把这个测试函数添加到了fuse示例/fusexmp.c,它运行良好。我认为这是因为它运行得非常快,并且不需要下次幻灯片。感谢您的详细信息。
    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2016-06-08
    • 2014-03-08
    • 2016-03-28
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多