DEV Community

Cover image for Что в процессе тебе моем?
Nikolay Fominykh
Nikolay Fominykh

Posted on

Что в процессе тебе моем?

Вместо вступления

Один из самых бесполезных вопросов, который можно встретить на собеседовании - "Чем отличается процесс от потока?".

Чем вопрос плох? Ответ на него гуглится очень быстро. Люди, читавшие книги на подобии Linux - Системное Программирование и Современные Операционные Системы ответ на него формируют долго. Дело в том, что не ясно, чего хочет услышать вопрошающий. Я, как человек, совершающий цикл собеседований раз в полгода-год - первые 2-3 собеседования заваливаю, чтобы понять как мне подстроится под текущее понимание процессов и потоков у вопрошающих. Чего они хотят на этот раз услышать от человека, который пары по операционным системам не прогуливал, но делал это очень давно?

In Real Life

Мне доводилось использовать в работе и процессы, и потоки, и конечно же асихронщину. Как правило сценарий в реальной работе выглядит следующим образом:

  • Эта штука работает час, при этом занято одно ядро из 16. Дай-ка я применю модуль multiprocessing. Хотя нет, граблей много - лучше сразу возьму loky.

  • Эта штука ничего не делает, но до неё не достучатся. Давайте применим threading.

  • Менеджер прочел статью о том, что threading это отстой, и сейчас повсюду асинхронщина. Давайте втащим asyncio или перепишем всё на go.

Issues

Счастье от ускоренного параллельным кодом длится не долго. Совсем. Приезжают следующие проблемы:

  • Кто-то подумал за нас и втащил в airflow multiprocessing. Это нормально. Но при неосторожном коде внутри dag - у нас плодятся zombie-процессы и под утро сервер скорее мертв, чем жив.

  • Стремление ускорить всё через threading приносит с собой счастье вроде GIL. И случайное поведение из-за каких-нибудь глобальных переменных - Threading local зачастую плохо гуглится из-за нежелания.

  • Код написанный в асинхронном стиле, внезапно, оказывается уязвим к утечкам памяти. А современные data science инструменты текут только так.

Вернемся к собеседованиям

Теперь давайте вернемся к собеседованиям. Чего хотят авторы вопросов про многопоточность и мультипроцессность обычно? На самом деле я не знаю.

Больше всего склоняюсь к мысли, что авторы спрашивают о том, что недавно узнали сами и это может быть что-то из следующего списка:

  • Thread'ы провоцируют GIL. Но он же сейчас скажет про гринлеты!
  • Multiprocessing из 20 процессов на 5 ядрах - это внезапно плохо, и переключение контекста жрет до хрена.
  • Event loop течет.
  • Если запустить 100500 go routine читать один файл с жесткого диска - внезапно станет очень плохо.
  • Ах да, есть понятие thread safe и оно касается всего. От глобальных переменных до select for update в БД.

Нужны ли на самом деле вопросы про process vs thread на собеседовании? Как вы думаете?

Моё мнение приблизительно следующее. Я конечно спрошу человека про thread vs process, и мне лично будет достаточно услышать что потоки бегут внутри процесса, а процессы могут взаимодействовать через IPC.

При этом, я полностью осознаю глупость данного вопроса. Это один из немногих вопросов, которые можно отнести к "открытым", развить в дискуссию, но.. Только если дискуссия не случилась раньше, по более интересным вопросам.

Oldest comments (0)