LINUX.ORG.RU

Накатал статью по своему скромному опыту войн с потоками

 , , ,


1

1

По следам треда: Python Shared Objects

Поскольку в прошлом треде все рискнувшие пройти по ссылке заснули на половине статьи, то я решил написать статью в 3 раза короче про совсем общие принципы, лишь отдаленно относящиеся к PSO:

https://habr.com/en/post/587750/ — Многозадачность и многопоточность — распространенные заблуждения и недопонимания

★★★★
Ответ на: комментарий от anonymous

Пусть у нас два потока по две команды. Пронумеруем команды первого 1, 2, а второго - a, b. Возможные последовательности:
12ab 1a2b 1ab2 ab12 a1b2 a12b

Да, получилось немного некорректно, потому что во вторичном процессе нужно было считать состояние между строчек, которых три для двух строк. В твоем случае получается не 3^2 потому, что у тебя нет цикла в правой части.

byko3y ★★★★
() автор топика
Ответ на: комментарий от anonymous

Накатал статью по своему скромному опыту войн с потоками

А примеры на Python использования API имеется?

Вообще, питон там имеет отношение только к Python Shared Objects, и по этой причине я не разместил его в питон-хабе, а только поставил тэг Python, иначе меня бы заминусовали к чертям.

byko3y ★★★★
() автор топика
Ответ на: комментарий от foror

Как я понял, автор сам не в курсе зачем он это сделал и кто его пользователи. Он сразу хочет, чтобы его в пайтонкор приняли или как минимум, чтобы два раза ку при его заходе на ЛОР

Что мне ловить в пайтон кор? Это как человек, который чистит туалеты в самолетах «как же я из авиации уйду?». Я прежде всего проект начинал этот для того, чтобы показать, что пайтонкор занимается херней.

byko3y ★★★★
() автор топика
Ответ на: комментарий от alysnix

я тебе честно скажу… я давно в этом деле, но то что ты говоришь - понимаю с трудом. термин «разделяемое состояние» вообще режет ухо, и является скорей буззвордом, чем существенным понятием

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

в многопотоке «гарантированная доставка» обеспечивается по сути тем, что каналы передачи сообщений, находятся в памяти, и потеря данных невозможна, это вам не физическая сеть

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

а если там есть и передача по физической сети, где возможны потери данных, то это делается про протоколам гарантированной доставки, то есть по подтверждениям получения пакетов на транспортном уровне

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от peregrine

будешь долго смеяться, когда поймёшь какое ограничение стоит у задачи про 3 курильщиков, которую ты вспомнил в статье, чтобы у неё были проблемы

Проблемы возникнут, когда курильщиков станет больше.

Весь вопрос в деньгах. Делают то что дешевле

Дешевле ARM. Другое дело, что сама IT индустрия противится инновациям, предпочитая использовать те технологии, которые всем давно привычны.

Нет, сложные. В плане они сложнее чем однопоточные. Но это та сложность, от которой не уйти

Вся проблема многопоточки в современной индустрии упирается в чудовищную неприспособленность модели машины Тьюринга для параллельных вычислений. И индустрия последние 60 лет никак не может оторваться от этой безнадежно устаревшей модели. По сути, машина Тьюринга — это рекуррентная функция, аргументом которой является предыдущее состояние, а следующее состояние является результатом. Именно по этой причине поведение Тьюринг-машины очень тяжело параллелизовать и вообще анализировать. Для простейших функций возможно упрощение, чем и занимаются многие компиляторы, но очень легко написать такую функцию, которую не сможет раскусить ни один компилятор, и лишь человек с большим трудом может ее проанализировать. Эт ото, что называется «лапша», но тот же банальный алгоритм Quicksort попадает в категорию лапши, поскольку по месту производит сложные рекуррентные преобразования блока памяти.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

но тот же банальный алгоритм Quicksort попадает в категорию лапши, поскольку по месту производит сложные рекуррентные преобразования блока памяти.

Критикуешь – предлагай. Только с учетом того, что:

Весь вопрос в деньгах. Делают то что дешевле

wandrien ★★
()
Ответ на: комментарий от peregrine

Труд программиста дорог и дешевле купить лишних компов, чем лишних программистов.

  1. Не всегда так.
  2. Выбор ЯП может быть обусловлен тупо рынком. На рынке JS программистов каждый второй, а человека со знаниями ассемблера хрен найдешь. Это Илон Маск может позволить себе открыть универ что бы самому делать нужных спецов, а остальные так не могут.
TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от wandrien

Критикуешь – предлагай. Только с учетом того, что

Пф-ф-ф, а ты разными алгоритмами сортировки пробовал интересоваться? Mergesort является красивым функциональным аналогом Quicksort, по характеристикам производительности они примерно одинаковы.

byko3y ★★★★
() автор топика
Ответ на: комментарий от TDrive

Выбор ЯП может быть обусловлен тупо рынком. На рынке JS программистов каждый второй, а человека со знаниями ассемблера хрен найдешь

А кто-то ищет? Ну вот я на асме пишу. а по итогу только пару контор предложили, и там, естественно, эмбед с оффлайном.

Это Илон Маск может позволить себе открыть универ что бы самому делать нужных спецов, а остальные так не могут

Я как-то пропустил этот момент. Последний раз я видел, что он собирал рандомных индусов по всему таиланду с минимальными порогом вхождения.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

А кто-то ищет? Ну вот я на асме пишу. а по итогу только пару контор предложили, и там, естественно, эмбед с оффлайном.

Я же написал что относительно рынка принимается решение. Если даже кто то и задумывался то глядя на рынок понимал что не выгодно. Ассемблер все таки особенная ситуация из за привязки к аппаратуре, лучше взять Си. Не было бы хайпа вокруг Раста, не было бы новых проектов на Расте. А так, уверен что любой инвестор не понимает в чем разница.

Я как-то пропустил этот момент. Последний раз я видел, что он собирал рандомных индусов по всему таиланду с минимальными порогом вхождения.

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

TDrive ★★★★★
()
Ответ на: комментарий от byko3y

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

прекрасное определение… только вот, если нет ни одного общего адреса, который могут читать/писать несколько потоков, то эти потоки строго независимы.

потому, что нет иного способа передать между ними информацию, кроме как через память … ну кроме совсем экзотических.

то есть, по твоему определению «разделяемое состояние» есть всегда, если потоки могут хоть как-то взаимодействовать… тогда его вводить бессмысленно, если мы вообще говорим о взаимодействующих потоках - раз они взаимодействуют - значит оно уже есть.

alysnix ★★★
()
Ответ на: комментарий от byko3y

Я прежде всего проект начинал этот для того, чтобы показать, что пайтонкор занимается херней

Другими словами, ты не сделал ничего полезного для людей. А пайтонкор игнорируют тебя вполне по разумным причинам. Я бы тоже игнорил шизика подрывающий мой авторитет.

foror ★★★★★
()
Ответ на: комментарий от alysnix

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

прекрасное определение… только вот, если нет ни одного общего адреса, который могут читать/писать несколько потоков, то эти потоки строго независимы

И самое прекрасное то, что в определении это уже учтено.

потому, что нет иного способа передать между ними информацию, кроме как через память … ну кроме совсем экзотических

Наследие архитектуры компов. В какой-то момент для упрощения весь ввод-вывод перевели в память. А на отдельных архитектурах даже доступ к регистрам сделали по адресам. Если ты переставишь местами причину и следствие, то ты, может быть, поймешь смысл одной из моих любимых фраз «архитектура современных процов делает невозможным эффективно параллельно выполнять алгоритмы».

то есть, по твоему определению «разделяемое состояние» есть всегда, если потоки могут хоть как-то взаимодействовать

Нет, не всегда. Только когда им пользуются одновременно. Ты намекаешь на что-то, что можно скатить в «у двух процессов в ОС разделяемая память, ну потому что проц же к одной и той же памяти обращается, правильно?».

byko3y ★★★★
() автор топика
Ответ на: комментарий от foror

Другими словами, ты не сделал ничего полезного для людей. А пайтонкор игнорируют тебя вполне по разумным причинам. Я бы тоже игнорил шизика подрывающий мой авторитет

Да, я ни секунды не с этим не спорю. Просто, здесь есть некоторые люди, который на полном серьезе считают, что питон куда-то там развивается. Я просто поясняю, почему питон уже примерно последние 15 лет стоит на месте, а меняется только ничего не значащая косметика. Некоторые еще считают, что раз питон такой популярный, то там в питонкоре дофигища разработчиков. А реальности такова, что в питонкоре разрабов не хватает, потому что большинство предыдущих спились от безысходности.

byko3y ★★★★
() автор топика
Ответ на: комментарий от TDrive

Я же написал что относительно рынка принимается решение. Если даже кто то и задумывался то глядя на рынок понимал что не выгодно. Ассемблер все таки особенная ситуация из за привязки к аппаратуре, лучше взять Си. Не было бы хайпа вокруг Раста, не было бы новых проектов на Расте. А так, уверен что любой инвестор не понимает в чем разница

Ты знаешь, я только недавно был на собеседовании. И глядя на твою фразу, я могу абсолютно точно сказать: программистов искать не умеют. То есть, венчурный инвестор вообще ничего не понимает в индустрии, но технически продвинутый чел не понимает просто чуть меньше. Нет никакого «глядя на рынок» — есть только «по моему опыту». А «мой опыт» — это в том числе «я прочитал на Stackoverflow, что такой-то язык популярен».

Итак, про собеседование. Человек, которого мне представили как «техлид» потребовал от меня рассказать смысл каких-то книжных определений, без единой строчки кода за всё собеседование, без каких-либо конкретных примеров. Меня больше всего убил вопрос «расскажи мне про контекст». Делаем ставки господа, что же такое «контекст». Лично мне это взорвало моск. Человек, похоже, при подготовке вопроса не удосужился открыть словарь и посмотреть, сколько есть значений у слова «контекст».

Это не одиночный пример, аналогичная ситуация была и на других собесах, и со слов других программистов у них был точно такой же опыт. То есть, как я уже давно говорю, люди, которые умеют писать код, и люди, которые имеют доступ к деньгам — это непересекающиеся множества. Под «доступ к деньгам» я не имею в виду просто хорошую ЗП — я имею в виду ДЕНЬГИ, хотя бы какой-то сраный миллион долларов иметь на месяц, чтобы хоть что-то на глобальном уровне значить.

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

Программистов валом, даже в параллельном потоке в моем институте я знаю двоих, с которыми ездил на олимпиады, и еще одного в школе недалеко от моей. Проблема в том, что многие программисты в той или иной степени социопаты, потому 95% собеседователей безошибочно отсеют их из-за того, что они неправильно хлебают смузи, не по гайдам.

byko3y ★★★★
() автор топика
Ответ на: комментарий от korvin_

социопаты

Может, социофобы?

Социофобы — это демо-версия социопатии:

«Диссоциа́льное расстро́йство ли́чности — расстройство личности, характеризующееся антисоциальностью, игнорированием социальных норм, импульсивностью, иногда в сочетании с агрессивностью и крайне ограниченной способностью формировать привязанности.»

Если социофоб избегает ответа на вопрос, то социопат уже конкретно определился с тем, что социум совершенно враждебен к нему, социальные нормы призваны сделать тебя рабом, а привязан он только к тем вещам, которые нравятся ему самому, а не к тем, которые прописаны в медицинском справочнике. По этой причине очень большое число миллиардеров прекрасно налазят на определение «социопат» — в особенности это помогает успешно отжать квартиру у бабульки без угрызений совести.

byko3y ★★★★
() автор топика

Все как обычно …

Начали о "Накатал статью по своему скромному опыту войн с потоками", а закончили "Социофобия"  
anonymous
()
Ответ на: комментарий от den73

в макромире (взаимодействие между людьми) и в микромире (межклеточное взаимодействие) происходит через передачу сообщений.
shared memory & locks - чисто человеческое изобретение. 😏

Minona ★★☆
()
Ответ на: комментарий от Minona

в макромире (взаимодействие между людьми) и в микромире (межклеточное взаимодействие) происходит через передачу сообщений.
shared memory & locks - чисто человеческое изобретение

Мне нравится твой образный подход, но я описал в статье, что, вообще-то, нервная система живых тушек построена на синхронных сообщениях. Только с применением сложного абстрактно-логического мышления удалось избавиться от формы сообщения и начать обращать внимание на ее содержание, но большинство живых организмов не могут игнорировать форму.

микромире (межклеточное взаимодействие) происходит через передачу сообщений

Только отдельные сигналы. Большинство взаимодействия основано именно на состоянии материи (кто кого сожрал). Причем, в том числе есть централизованная координация, вроде дневных-месячных циклов — другое дело, что в живых организмах никогда нет единственного звена, от которого зависит вообще вся работоспособность системы. Единственный центральный координатор — это очень просто и удобно для понимания, но очень сильно ограничивает эффективность и отказоустойчивость механизма.

byko3y ★★★★
() автор топика
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Ты лучше расскажи что там с gil? Для Ъ

А что с GIL? Как была, так и есть. Ее никогда не уберут. Я предпочел иметь несколько GIL, имея несколько интерпретаторов.

byko3y ★★★★
() автор топика
Ответ на: комментарий от ox55ff

Что что? Это костыль. Должно быть стыдно

Гвидо не стыдно — почему мне должно быть стыдно?

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

я описал в статье, что, вообще-то, нервная система живых тушек построена на синхронных сообщениях.

ошибаешься.
там 2 канала взаимодействия - быстрый и медленный.
быстрый - электро-химический, он синхронный в том смысле, что сигнал на входе «мгновенно» появляется на выходе.
медленный - в нем «сообщения» упаковываются (кодируются) в сложные молекулярные структуры и физически перемещаются по «каналу», т.е. он асинхронный.

Только с применением сложного абстрактно-логического мышления удалось избавиться от формы сообщения и начать обращать внимание на ее содержание, но большинство живых организмов не могут игнорировать форму.

сорри, я в этом сообщении не понял ни формы, ни содержания. 😏

Только отдельные сигналы

в смысле?
природа не изобрела никакого другого способа коммуникации, кроме передачи сообщений.
но тут возникает вопрос: является ли сама среда передачи таких сообщений аналогом shared memory и где там локи? 😏

Minona ★★☆
()
Ответ на: комментарий от Minona

быстрый - электро-химический, он синхронный в том смысле, что сигнал на входе «мгновенно» появляется на выходе.
медленный - в нем «сообщения» упаковываются (кодируются) в сложные молекулярные структуры и физически перемещаются по «каналу», т.е. он асинхронный

Медленный уже эквивалентен иммутабельным данным с gossip протоколом или прочим eventual consistency. Все-таки сообщения в комплюктерных системах подразумевают одиночную реакцию, а не постоянное воздействие, как в упомянутых тобой механизмах.

Только с применением сложного абстрактно-логического мышления удалось избавиться от формы сообщения и начать обращать внимание на ее содержание, но большинство живых организмов не могут игнорировать форму.

сорри, я в этом сообщении не понял ни формы, ни содержания

Я о том, что нервная система — это по большей части синхронные каналы с небольшим объемом состояния, которое обычно довольно медленно меняется.

природа не изобрела никакого другого способа коммуникации, кроме передачи сообщений
но тут возникает вопрос: является ли сама среда передачи таких сообщений аналогом shared memory и где там локи?

Прежде всего нужно понимать, что между живыми вещами и компьютерными программами нет 1 к 1 соответствия, потому ты там никогда не найдешь ни компьютерных сообщений, ни мьютексов. Однако же, строго пошаговая обработка вполне себе присутствует — а это далекий эквивалент мьютекса. Например, нельзя чихать и писять одновременно.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

… нельзя чихать и ссать одновременно.

Шутка

Это да.
Не везде параллельность не всегда уместна … /примеров много/

anonymous
()
Ответ на: комментарий от byko3y

Однако же, строго пошаговая обработка вполне себе присутствует

Например, нельзя чихать и писять одновременно.

это не строго-пошаговая, а взаимно-исключительная да и то с оговорками «можно, но ты не захочешь» — именно про это забывают любители говорить с набитым ртом, когда глотательный рефлекс и дыхательный пересекаются. Многие такие «автоматизмы» поддаются подавлению (даже чихание). В общем тут все не так уж «строго».

Вот «борьба/войны с потоками» настораживает. Обычно не приходится бороться с потоками, которых нет (если вместо них можно обойтись чем-то проще: вспоминается, как странное (не)понимание многопоточности приводило к запутанным решениям, отданым на откуп скорее рандому, чем «некой тактики, которой можно придерживаться». Люди тратили тонны времени на отладку странных багов, о которых не подозревал даже автор одной биржевой программы, у которого после старта потоков (а потоков там была тьма) никто не ждал их завершения — и все проблемы сняло как рукой, заменой этой вот «многопоточности» на бэкграунд-воркер (1 штука) с очередью задач). Иногда (довольно часто), если подумать, для широкого класса задач многопоточность применяют на волне моды — и в косой реализации она не только не дает выигрыша, но и приводит к тормозам и глюкам.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

это не строго-пошаговая, а взаимно-исключительная да и то с оговорками «можно, но ты не захочешь» — именно про это забывают любители говорить с набитым ртом, когда глотательный рефлекс и дыхательный пересекаются. Многие такие «автоматизмы» поддаются подавлению (даже чихание). В общем тут все не так уж «строго»

Дыхание и кушание могут происходить асинхронно, но каждое действие выполняется строго поочереди, если что-то выполняется одновременно — это состояние гонок, то есть «подавился». Конечно, там не всё так просто, но в общем идея именно эта.

Люди тратили тонны времени на отладку странных багов, о которых не подозревал даже автор одной биржевой программы, у которого после старта потоков (а потоков там была тьма) никто не ждал их завершения — и все проблемы сняло как рукой, заменой этой вот «многопоточности» на бэкграунд-воркер (1 штука) с очередью задач)

То, что ты сейчас описываешь — это уровень понимания «прочитал в книжке раздел про потоки». Пул воркеров — это, наверное, самый распространенный способ организации многопоточных вычислений. И автор твоей «биржевой программы», видимо, не дошел до этого раздела в книжке.

Иногда (довольно часто), если подумать, для широкого класса задач многопоточность применяют на волне моды — и в косой реализации она не только не дает выигрыша, но и приводит к тормозам и глюкам

С распределенными системами, в частности, с микросервисами, та же история — их применяют там, где они растягивают в разы разработку и требования к конечной системе, при этом не дают никакой масштабируемости.

byko3y ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.