Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Перенос на другие системы /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Замечания по потокам RTS - Программирование от RIN.RU
Замечания по потокам 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, я предлагаю следующее:


  • Измените функции, используемые MySQL из библиотеки потоков для POSIX. Это не должно занять много времени.

  • Скомпилируйте все библиотеки с -DHAVE_rts_threads.

  • Скомпилируйте thr_alarm.

  • Если существуют некоторые небольшие отличия в реализации, то они могут быть устранены изменением 'my_pthread.h' и 'my_pthread.c'.

  • Запустите thr_alarm. Если программа выполняется без каких-либо предупреждений, сообщений об ошибках или об аварийном выходе, значит, вы на правильном пути. Ниже приводится успешный прогон программы под Solaris:


    Main thread: 1
    Thread 0 (5) started
    Thread: 5 Waiting
    process_alarm
    Thread 1 (6) started
    Thread: 6 Waiting
    process_alarm
    process_alarm
    thread_alarm
    Thread: 6 Slept for 1 (1) sec
    Thread: 6 Waiting
    process_alarm
    process_alarm
    thread_alarm
    Thread: 6 Slept for 2 (2) sec
    Thread: 6 Simulation of no alarm needed
    Thread: 6 Slept for 0 (3) sec
    Thread: 6 Waiting
    process_alarm
    process_alarm
    thread_alarm
    Thread: 6 Slept for 4 (4) sec
    Thread: 6 Waiting
    process_alarm
    thread_alarm
    Thread: 5 Slept for 10 (10) sec
    Thread: 5 Waiting
    process_alarm
    process_alarm
    thread_alarm
    Thread: 6 Slept for 5 (5) sec
    Thread: 6 Waiting
    process_alarm
    process_alarm


    ...
    thread_alarm
    Thread: 5 Slept for 0 (1) sec
    end




 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь
Жилье в столице! Отличное общежитие для студентов-заочников дмитровское шоссе выгодно.