14.01.07, Igor Sysoev<is@xxxxxxxxxxxxx> написал(а):
> И насколько я помню, linuxthreads таки всё-таки действительно
> linuxthreads, т.е. rfork, а libthr - достаточно честные треды. Нет?
Да, linuxthreads - rfork, а libthr - трэды, но большой разницы в этом нет.
На rfork'е сложно делать POSIX-compatible threads, но к производительности
это не имеет отношения. А mysql к такому не совсем POSIX-поведению привык
ещё тех со времён, когда под Линуксом были только clone'ированные трэды.
1. Хм... Мне казалось, что именно разница (может и не существенная,
понятно, что тот же fork() делается достаточно хитро на современных
rfork() != fork(). Это очень разные вещи. Во FreeBSD fork() - это частный
случай rfork()а: rfork(RFPROC|RFFDG).
системах) в форках/тредах приводила к тому, что NetBSD достаточно
долгое время лидировал по бенчмаркам на mysql (родные треды). Ну да
ладно, я эти тесты не проверял, может там какие гики чего неправильно
делали.
Имеется ввиду http://software.newsforge.com/software/04/12/27/1243207.shtml ?
Проблема всех этих бенчмарков заключается в том, что их, как правило, проводит
человек, который хорошо ориентируется только в одной OS.
У NetBSD 2.0 интересные потоки на основе scheduler activations (правда,
не знаю, насколько они беспроблемные), но поддержка SMP в ядре на уровне
FreeBSD 3-4, то есть, один глобальный спинлок.
2. А сейчас в Linux они сильно отличаются? Опять же, не изучал, но там
вроде опять что-то процессообразующее...
NPTL использует всё тот же clone(), но его научили совместимости с POSIX.
Игорь Сысоев
http://sysoev.ru