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