Задать вопрос
  • Куда лучше поступать для обучения на программиста?

    @Sazoks Автор вопроса
    Херня ВУЗ, разве что из-за отсрочки от армии, но лучше б после школы отслужил.
    Не в обиду преподавателям, есть действительно Преподаватели, Учителя, и я их очень уважаю. И в ИКИТе (что я в итоге и окончил) тоже есть такие. Но к сожалению и они, и мы (студенты) - заложники безнадежно устаревшей системы образования. Есть план, его надо выполнить) Много мусорных предметов под видом "общего развития, это же высшее образование"! Но если человек чем-то горит, искренне увлечен (а у прогеров такое очень часто, особенно в школе), то тут не получится как раньше с огнем в глазах прогать и прогать. Огонь быстро потушат. Есть продажные преподы, которые наживаются на студентах. Будь то взятки или заставляют писать работы и указывать себя в соавторах, за что ВУЗ им денюжку платит. Есть преподы - реально крутые практикующие программисты, но вот загвоздка, они - очень крутые спецы, но не преподы) И многие из них пришли на полставки просто из-за того, что есть свободное время и хочется общения, социализации)) Есть преподы "старой закалки", которым под 60+. Был у нас один физик такой. Мужик-то на самом деле хороший, ворчливый, но хороший. Но как препод.. ой как же он душил)

    Дам самый главный совет, раз у тебя похожая ситуация.
    Поступай, если не хочешь служить в армии, а тем более в такое неспокойное время.
    И на самом деле, я сам совершил очень много ошибок.
    1. Я реально 2 года честно делал все лабы, ходил на все лекции, строчил конспекты по матанализу так, что ручка дымилась. Но на самом деле, надо было все это дерьмо ДЕЛЕГИРОВАТЬ. Если есть деньги или уже подрабатываешь, не бойся "инвестировать" в свое же свободное время, делегируя всю ненужную хрень (а она реально не нужна, я вот все уже забыл) другим. Пусть они делают. А ты себе время и нервы сэкономишь. И лучше позанимаешься своими делами, которые реально тебя сделают крутым прогером.
    2. Составь себе план обучения, по которому ты сможешь идти несколько лет. Эдакий путь к мечте. И вот все свободное время (не забывая про отдых) посвящай этому плану. Занимайся, фиксируй развитие. Тренируйся.
    3. САМОЕ ГЛАВНОЕ. Не всегда все можно делегировать. Будет много дерьма, которого не будет хотеться делать. Я очень много времени потерял на уговаривания себя сделать то, что не хочу. Ближе к 3-му курсу (когда разочаровался в ВУЗе) начал откладывать все дела по учебе на потом. А потом в авральном режиме еле-еле на 4 закрывал сессию. Бывало и списывал с наушником, хех) Более того, из-за того, что я откладывал дела на потом, я не мог даже нормально работать (я уже тогда нашел первую работу официальную) и развиваться. Это очень важный эффект, который нельзя недооценивать. НИКОГДА НЕ ОТКЛАДЫВАЙ ДЕЛА НА ПОТОМ! Черт возьми, ты не убежишь от ВУЗа, как бы не сопротивлялся, не получится. Капризы не могут, проверено) Поэтому просто сядь, сконцентрируйся, сделай это дерьмо как можно быстрее, даже если ты 2-3-4 месяца не будешь вообще прогать для себя. А вот потом, когда за 2-3 недели (до этого я додумался к концу ВУЗа) закроешь весь семестр, вот тогда у тебя будет на душе легко, и все остальные дела будут идти как по маслу)

    В общем-то, это все. Интересный был опыт. Знакомые, друзья появились, отношения с девушками. Все это опыт. Просто я наошибался) Ну а систему образования мы не переделаем. Надеюсь, тебе это поможет.

    P.S. Ну и хоть для какой-то авторитетности мнения добавлю, что работать начал я с середины второго курса. Начинал с фриланса, потом по шарашкиным конторам бегал. Сейчас работаю мидлом на крупном проекте в ритейле (ты точно хоть раз там покупал продукты). И на самом деле - я далеко не самый крутой пример. Я знаю людей, которые в моем возрасте уже под 300к+ получают. Могу сказать, что эти люди также занимались сами, не шли как стадо в ВУЗ, пуская слюну и приговаривая под нос "высшее образование, высшее образование!". ВУЗ-то они окончили, но не совершали ошибок, описанных мной выше. Либо вовремя одумались.
    В общем, от ВУЗа ты не убежишь, поэтому надо пройти его максимально оптимально и эффективно, занимаясь тем, что тебя реально зажигает, не забрасывая личную жизнь (друзья, девушки, отдых). И все будет пучком)
    Написано
  • Правильно ли я понял свойства распределенных систем?

    @Sazoks Автор вопроса
    Спасибо за развернутый ответ и доходчивые примеры))
    Написано
  • Правильно ли я понял свойства распределенных систем?

    @Sazoks Автор вопроса
    Спасибо, понял, есть пища для размышлений)
    Написано
  • Правильно ли я понял свойства распределенных систем?

    @Sazoks Автор вопроса
    Если отказоустойчивость, как и высокая доступность, исчисляется в %, тогда как будто между ними нет разницы. Не могли бы объяснить чуть подробнее?
    Написано
  • Почему система падает при большом трафике?

    @Sazoks Автор вопроса
    Благодарю за ответ! Формулы эти я просто для себя писал, чтоб хоть какую-то модель в голове построить.
    Отдельное спасибо за то, что подсветили и другие возможные проблемы. Оказывается, то, о чем я писал в вопросе - всего лишь одно из возможных последствий.
    Написано
  • Что планирует ОС - потоки или процессы?

    @Sazoks Автор вопроса
    Saboteur, это ясное дело) Тут вопрос именно в планировании. Хотелось понять, что все-таки реально планирует ОС и откуда подгружает инструкции для выполнения. Судя из ответов, она планирует именно потоки, ну а процессы - действительно некоторые контейнеры, адресное пространство и другие ресурсы которого разделяют потоки. Хотя, признаться, мне все еще кажется, что я не полностью пониманию всю полезность и важность процессов. Неужто только для группировки потоков и предоставления им адресного пространства?
  • Что планирует ОС - потоки или процессы?

    @Sazoks Автор вопроса
    Justa Gain, я знаю, что это разные абстракции. Тут речь вовсе не об ЯП, а об абстракциях ОС. ЯП тут мало фигурируют. И это никак не поясняет, почему ты снова сказал, что я смешал все в кучу.
  • Что планирует ОС - потоки или процессы?

    @Sazoks Автор вопроса
    Большое спасибо за ответ!
    Можете, пожалуйста, помочь разобраться вот в чем. Я много в каких статьях, ресурсах и лекциях видел следующее описание.

    64d7498e130a0908385243.png

    https://studfile.net/preview/3181036/page:41/

    Я знаю, что у каждого потока свои instruction pointer и значения регистров, но в разных источниках пишут также то, что на скрине выше. Из-за этого возникает некоторая путаница с пониманием назначения потоков и процессах. Во многих лекциях и статья так вообще через слеш пишут - "когда ОС планирует поток/процесс..", что-то вроде такого.

    И можете, пожалуйста, привести хотя бы один небольшой пример, где замешаны процессы? Например, небольшой пример, как ОС использует этот учет ресурсов?
  • Что планирует ОС - потоки или процессы?

    @Sazoks Автор вопроса
    mayton2019, спасибо за комментарий! Уточнил в вопросе (Windows).
  • Что планирует ОС - потоки или процессы?

    @Sazoks Автор вопроса
    Justa Gain, объясни конкретно, что именно я смешал? Разве возможно это полностью разделить и изолировать друг от друга? Я не системный программист, я занимаюсь бэкендом, но мне просто интересно понять, построить хотя бы упрощенную модель, которая передаст суть и основные принципы работы ОС и планировщика.

    Я не думаю, что смешал все в кучу, ведь все взаимосвязано. Разве не ОС занимается управлением ресурсов системы (ЦП, память, периферия и др.)? Ты лучше бы с высоты своих знаний не насмехался над вопросами, а помог бы разобраться и сделал коммьюнити чуть лучше. Пока что я вижу, что ты только и можешь задавать этот свой вопрос)
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Vamp, огромное спасибо, прям внесли ясность) Я почитал, все-таки в Python для каждого потока создается именно нативный поток, управляемый ОС. Истинного параллелизма в Python нет потому, что присутствует механизм GIL - глобальный блокировщик интерпретатора. Я смотрел англоязычную лекцию на ютубе, и там прям говорилось, что GIL контролирует не то, когда засыпать потокам, а то, когда им просыпаться.

    При запуске .py-файла запускается однопоточный процесс, в котором запускается Сишная функция main, которая работает в 3 шага:
    1. Инициализация интерпретатора
    2. Компилирование Python-кода в платформонезависимый байт-код
    3. Бесконечный цикл с гигантским switch'ем всех возможных байт-код инструкций


    И вот допустим у нас есть два потока. ОС выполняет сразу два потока параллельно, но один из потоков действительно выполняется и делает полезную работу, а другой поток (помним, что мы находимся в моменте, когда работает два потока одновременно, ОС так решила) тоже выполняется, но он каждые несколько миллисекунд (зависит от настройки интерпретатора) пытается захватить GIL. И вот если GIL захвачен и установленное интерпретатором время еще не вышло, действительно работающий поток не отдает GIL, а когда время выходит, GIL захватывает другой поток и так по кругу.

    Эта проверка в потоках, которые как бы работают на процессоре, но Python не позволяет им заниматься обработкой Python-переменных, выполняется в том самом бесконечном цикле перед switch'ем. Конечно, потоки работают не всегда, т.к. пока работает основной поток, операционная система может второй поток уже усыпить и разбудить несколько раз. Однако если время пробуждения, установленное в интерпретаторе, еще не вышло, этот поток так и будет пытаться захватить GIL.

    Еще раз большое Вам спасибо за столь подробный и терпеливый ответ)

    P.S. Опять же, это связано именно с CPU-bound задачами. В I/O-bound задач Python-потоки реально могут работать параллельно, т.к. на блокирующих системных вызовах поток отпускает, а после выполнения операции снова захватывает GIL. То же самое и на тяжелых CPU-bound задач с помощью вызовов Си-функций. С этим я пока еще не разобрался.
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Прошу прощения, надо бы мне снова взять в привычку все ссылки сразу упорядочивать..
    Смог найти только такую схему
    64d374e985002623698741.png

    Здесь в принципе и отражено то, что я имел в виду. Использование только зеленых потоков, сопоставление каждому зеленому потоку поток я пространстве ядра и комбинированный подход.
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    А подскажите пожалуйста насчет userspace-потоков. Я в одной статье читал, что иногда таким потокам может сопоставляться kernelspace-поток. И также в той статье было сказано, что (здесь могу неточно выразиться) userspace-потоки не могут выполняться на разных ядрах, т.к. (вроде бы) у них нет контекста, а вот kernelspace-потоки - могут. Можете этот момент подробнее рассказать?
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Это самый лучший ответ, спасибо большое, что так подробно разжевали все) После просмотра небольшого курса по архитектуре ОС Ваш ответ еще больше мне раскрыл глаза, как все устроено на самом деле.
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Большое спасибо!
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Большое Вам спасибо, хороший ответ! Теперь появилась какая-то устойчивая базовая картина и отправная точка для дальнейшего исследования. То, что я и хотел, в целом :)
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    hint000, спасибо, что объяснили "на пальцах", стало попонятнее немного) Насчет бреда, почему же. Что плохого, что у меня на данный момент нет полных знаний? Тем более это не моя профильная область, мне просто хочется понять чуть лучше внутреннее устройства ОС и принципы работы ЦП. Вопросы задавал в силу своего (не)понимания.
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Евгений Шатунов, большое спасибо за план и за книгу! Поизучаю. Насчет каши, ну, вероятно вы правы) Затем и обратился к знающим людям, чтоб эту кашу помогли переварить)
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    Юрий, я понимаю, я его упомянул лишь из-за библиотеки threading, т.к. в одной из статей сказано, что такие библиотеки и позволяют создавать kernelspace-потоки, либо я что-то не так понял. На асинхронность.. почему же, все равно ведь этот подход базируется на неблокирующих I/O-операциях, делегируя чтение/запись как раз-таки ядру, что и позволяет асинхронному Python-коду заниматься выполнением других полезных задач, разве нет?
  • Как на самом деле работает параллелизм?

    @Sazoks Автор вопроса
    mayton2019, спасибо за комментарий! Да, я знаю, что довольно много сомнительных формулировок. Попытался максимально точно описать то, как я все это понял.

    Как только kernel (thread) обращатеся к памяти или к внешним устройствам - тут нет никакого параллелизма.
    Становимся в ожидание пока устройство ответит.

    Но ведь это в рамках одного ядра, верно? Другие ядра могут совершать другие действия параллельно относительно друг друга, разве нет?