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.

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

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay