Ruby Threading тупики - PullRequest
       8

Ruby Threading тупики

0 голосов
/ 03 декабря 2009

В данный момент я пишу проект, который включает в себя запуск двух параллельных потоков для регулярного извлечения данных из разных источников. Я использую функциональность Threads в ruby ​​1.9 для этого, но, к сожалению, сталкиваюсь с проблемами взаимоблокировки. Также у меня есть ощущение, что метод Thread.join заставляет потоки ставиться в очередь, а не работать параллельно.

Я новичок в многопоточном программировании, и мы будем благодарны за любые советы

Приветствия

Patrick

РЕДАКТИРОВАТЬ: общий ресурс, к которому обращаются оба потока, является базой данных MySQL, которая может быть проблемой. После нескольких итераций запускаемых потоков возникает тупик.

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Очень трудно диагностировать, что может пойти не так, без дополнительных подробностей, но тупик (очевидно) вызван несколькими потоками, пытающимися получить ресурсы, удерживаемые другими. Это действительно означает, что у вас должно быть как минимум два мьютекса и два потока. Может ли это происходить в вашем коде?

Thread.join не имеет ничего общего с параллельным выполнением - это метод синхронизации, позволяющий одному (обычно главному) потоку ожидать завершения одного или нескольких потоков.

1 голос
/ 04 декабря 2009

Какую реализацию Ruby 1.9 вы используете? YARV не может запускать Ruby Threads параллельно. На данный момент не существует готовой к реализации реализации Ruby 1.9, которая могла бы запускать потоки параллельно. JRuby может выполнять параллельные потоки, но реализация Ruby 1.9 еще не совсем завершена. (Хотя стабильно , поэтому, если все необходимые функции есть, вы можете использовать его.)

1 голос
/ 04 декабря 2009

Вы можете использовать механизмы синхронизации, такие как Mutex, Monitor, Queue, SizedQueue из стандартной библиотеки. Или проблема в их использовании?

...