Сколько нитей Ruby слишком много?
Я пишу приложение Merb, которое использует комбинацию SimpleDB и Tokyo Tyrant для хранения. Для обоих этих хранилищ данных я реализую функциональность типа IN (list), раскручивая поток для каждого значения в списке, а затем объединяя наборы результатов. Учитывая, что это веб-приложение, существует ли ограничение на число потоков, которые я должен создавать? Ruby 1.8.7, так что это не потоки ядра.
3 ответа
Потоки кажутся плохим подходом к тому, что вы пытаетесь сделать здесь, и если вы не можете использовать JRuby, я бы просто отбросил потоки. Тем не менее, вы можете создать файл ruby, загружающий базу данных, и использовать библиотеку тестов, чтобы выполнить сравнительный анализ, для которого число является самым быстрым. Вы, вероятно, хотите посмотреть на используемую память тоже.
Для меня ваша проблема звучит как IO, так что многопоточность одного ядра может помочь.
Большую часть времени в вашем основном цикле Ruby вы, вероятно, будете ожидать токийского тирана и простой БД, которые выполняются в отдельном многопоточном процессе.
Так сколько потоков? Кто знает? Вы собираетесь измерять и измерять.
Если вы используете MRI, то использование потоков в таких случаях не будет большой помощью, так как MRI использует зеленые потоки, которые не помогают в вычислительных операциях. Я полагаю, что использование JRuby(нативные темы) будет полезно тогда. Я постоянно слышу, что для нативных потоков лучше использовать (количество ядер + 1), чтобы использовать доступные ядра.