Как правильно добавить нить в предохранитель - PullRequest
1 голос
/ 12 марта 2012

Я работаю над проектом файловой системы на основе FUSE.И я хочу добавить к этому какое-то прочтение.Поэтому я создаю поток для обработки таких задач, но кажется, что я сделал это действительно медленнее, чем я думал. (Даже если я просто добавляю свободный поток, это делает мою программу намного медленнее, чем без нее, но этого не произошлокогда я добавил эту функцию в свою серверную программу, которая не использует 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 или что-то еще?Надеюсь, вы, ребята, могли бы дать мне несколько советов, например, что мне нужно проверить.

Еще раз спасибо.

1 Ответ

3 голосов
/ 12 марта 2012

Ваш поток занят ожиданием , что означает, что он будет использовать столько ресурсов процессора, сколько сможет.Возможно, вы захотите добавить небольшую задержку в ваш поток, чтобы позволить другим потокам и процессам запускаться тоже:

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