E.5 Замечания по потокам RTS
E.5 Замечания по потокам RTS
При попытке применить пакеты потоков RTS с MySQL автору пришлось
столкнуться со следующими проблемами:
В этих пакетах используются старые версии большинства вызовов POSIX,
поэтому очень утомительно создавать оболочки (wrapper) для всех функций.
На мой взгляд, было бы легче изменить библиотеки этих потоков в
соответствии с современной спецификацией POSIX.
Некоторые оболочки уже написаны (чтобы получить более подробную
информацию, обращайтесь к `mysys/my_pthread.c').
Следует изменить, по меньшей мере, следующие аспекты:
В pthread_get_specific должен использоваться один аргумент, а в sigwait -
два аргумента. Многие функции (по крайней мере, pthread_cond_wait,
pthread_cond_timedwait) должны возвращать код ошибки или ошибку. Сейчас
они возвращают -1 и устанавливают errno.
Еще одна проблема заключается в том, что потоки пользовательского уровня
используют сигнал ALRM, преждевременно прекращающий работу многих функций
(read, write, open...). MySQL должен повторять попытку выполнить такие
вызовы в случае прерывания, но это не так легко проверить.
Наиболее значительная из нерешенных проблем заключается в следующем:
Чтобы получать alarm на уровне потока, я изменил mysys/thr_alarm.c -
чтобы ожидать alarm с помощью функции pthread_cond_timedwait(). Однако
оказалось, что это приводит к преждевременному прекращению работы с
ошибкой EINTR. Чтобы понять, почему так получается, я пытался отладить
библиотеку потока, но не смог найти никакого простого решения.
Для тех, кто хочет попробовать использовать MySQL с потоками RTS, я
предлагаю следующее:
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий
|