Привет!

Мы вовсю готовимся к предстоящей конференции RailsClub 2017 (все случится 23 сентября) и беседуем с нашими спикерами о жизни и программировании. Сегодня Михаил Моргунов разговаривал с Richard Schneeman из Heroku, Ruby Hero 2016, Топ 50 Rails contributors.

image

Почему в докладе ты хочешь поговорить о потоках в Ruby?

Многие не используют потоки, потому что это сложно. Да, внутри Ruby есть куча факторов, которые все усложняют — например, глобальные переменные или Global VM Lock (GVL). Разработчики ошибочно считают, что использовать потоки сложно из-за того, что GVL делает их менее полезными. И якобы поэтому мы не можем использовать их внутри Ruby. Я стараюсь показать, что есть аргументы за использование потоков в Ruby, есть подходящие для этого сценарии. Да, использовать потоки тяжело, и не только в Ruby, но и в любом другом языке программирования. У меня есть опыт работы с многопоточностью в С и там с этим все намного хуже! Ruby не самый простой язык для работы с потоками, но точно не самый сложный. Когда мы разрабатываем приложения, мы можем увидеть, как потоки дают значительное увеличение производительности. Например, фоновые задачи. У меня есть библиотека под названием Puma Worker Killer. Ее можно использовать, к примеру, для перезапуска цикла раз в 4 часа. Без потоков это невозможно реализовать, так что я использовал потоки как основу работы библиотеки. Вот поэтому я и решил сделать такой доклад.

Где сейчас ты используешь потоки?

На данный момент, я занимаюсь поддержкой:

Puma Worker Killer
— Библиотеки под названием Threaded (реализация через пул потоков)
Concurrent Ruby

При помощи потоков, мы можем запускать проверки параллельно, которые будут выполняться одновременно. В итоге это в 6 раз быстрее.

Сколько потоков мы можем запустить одновременно и сколько памяти это займет?

Это один из самых сложных вопросов в мире! :) Я как-то спросил об этом профессора из университета, и она не смогла дать мне хороший ответ. В общем, вы можете запустить столько потоков, сколько есть CPU. Узнайте, сколько у вас ядер у процессора, и запустите столько же потоков. Каждое добавление потока уменьшает количество доступной памяти. Другая альтернатива — это использовать отдельные процессы. Но они используют гораздо больше памяти, чем потоки. Ruby использует много памяти сам по себе, поэтому использование только процессов потребует огромного объема памяти. Причина номер один, почему стоит использовать потоки — это правильное использование памяти. Вторая причина — I/O. Когда где-то используется I/O, то здесь нужно использовать потоки. Если коротко: количество CPU = количество потоков. Хорошее количество для начала — 5. Начав с него, вы можете увеличить или уменьшить количество потоков, в зависимости от вашей системы. А сказать конкретное число действительно сложно.

Как ты стал программистом?

Я начал изучать Ruby в университете. В то время, вебсайты и вебприложения были очень популярны, все только о них и говорили. Я слышал об успехе Билла Гейтса и подумал: «Вау! Я хочу быть как он! Я хочу миллиард долларов!». Я спросил соседа по комнате, который учился на факультете компьютерных наук, как сделать сайт. Он сказал, что один из популярных вебсайтов того времени использует Ruby on Rails. Я купил книжку “Ruby on Rails для чайников”. В университете я учился на инженера, чтобы в итоге делать холодильники, и это было очень скучно. В итоге я все свободное время посвятил разработке сайтов и самообучению. Мне это так понравилось! Я начал ходить на митапы для разработчиков, вступал в юзергруппы. Ну и примерно с этого времени я начал заниматься этим профессионально.

Какой бы совет ты дал новичку?

Попытайтесь найти то, что принесет вам миллион долларов! :) Иногда люди спрашивают меня: «Как стать программистом, как этому научиться?». Я прошу их сделать шаг назад и спросить себя: «Что я в итоге хочу создать»? Вы можете себе это представить? Это может быть что угодно, но иметь четкое представление в голове очень важно. Самая сложная часть программирования — не технический аспект. Самое сложное в том, чтобы не терять интерес и быть в восторге от своей работы. Найдите то, что вас вдохновляет и не останавливайтесь!

Какое у тебя хобби? Чем занимаешься в свободное время?

Работа руками, очень нравится столярное дело. Но прямо сейчас у меня нет свободного времени, потому что я поступил в магистратуру и это занимает его на 100%. А еще в декабре у меня будет новое хобби — родится мой второй ребенок. Я очень жду этого! Дети — это полный рабочий день, так что я сделаю двухмесячный перерыв в работе, буду заниматься семьей, а все остальные занятия буду рассматривать как хобби.

Прочитать оригинал интервью на английском можно на hype.codes.

Доклад Ричарда на предстоящем RailsClub называется Threads Aren't Evil, приходите и задайте все оставшиеся вопросы лично!

Регистрируйтесь, времени осталось совсем немного!

Комментарии (0)