Pull to refresh
35
0
Valentin Nechayev @netch80

Программист (backend/сети)

Send message

Приёмы неблокирующего программирования: полные барьеры памяти

Reading time9 min
Views8.6K

В первых двух статьях цикла мы рассмотрели четыре способа упорядочить доступ к памяти: load-acquire и store-release операции в первой части, барьеры чтения и записи в память — во второй. Теперь пришла очередь познакомиться с полными барьерами памяти, их влиянием на производительность, и примерами использования полных барьеров в ядре Linux.


Рассмотренные ранее примитивы ограничивают возможный порядок исполнения операций с памятью четырьмя различными способами:


  • Load-acquire операции выполняются перед последующими чтениями и записями.
  • Store-release операции выполняются после предыдущих чтений и записей.
  • Барьеры чтения разделяют предыдущие и последующие чтения из памяти.
  • Барьеры записи разделяют предыдущие и последующие записи в память.

Внимательный читатель заметил, что одна из возможных комбинаций в этом списке отсутствует:

Чтение выполняется... Запись выполняется...
… после чтения smp_load_acquire(), smp_rmb() smp_load_acquire(), smp_store_release()
… после записи ??? smp_store_release(), smp_wmb()
Оказывается, обеспечить глобальный порядок записей и последующих чтений из памяти гораздо сложнее. Процессоры вынуждены прилагать отдельные усилия для этого. Сохранение такого порядка стоит недёшево и требует явных инструкций. Чтобы понять причину этих особенностей, нам придётся спуститься на уровнь ниже и присмотреться к тому, как процессоры работают с памятью.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments4

Введение в неблокирующие алгоритмы

Reading time8 min
Views22K

Неблокирующие алгоритмы широко применяются в ядре Linux когда традиционные примитивы блокировки либо не могут быть использованы, либо недостаточно быстры. Эта тема многим интересна и время от времени всплывает на LWN. Из недавнего — вот эта июльская статья, которая собственно и сподвигла меня написать свою серию. Ещё чаще разговор заходит про механизм read-copy-update (RCU — руководство 2007 года всё ещё актуально), подсчёт ссылок, и способы сделать более понятные, высокоуровные API ко всему этому разнообразию. Ну а сейчас вас ждёт погружение в идеи, стоящие за неблокирующими алгоритмами, а также их использованием в ядре.


Знание низкоуровневой модели памяти в целом считается продвинутым уровнем понимания, которого страшатся даже опытные программисты-ядерщики. Словами нашего редактора (из его июльской статьи): «Понять модель памяти можно лишь правильно повёрнутым мозгом». Говорят, что моделью памяти Linux (и файлом memory-barriers.txt в частности) можно пугать детей. Порой для достижения эффекта достаточно всего лишь рявкнуть “acquire” или “release”.


И в то же время, механизмы вроде RCU и seqlocks так широко применяются в ядре, что практически каждый разработчик рано или поздно сталкивается с фундаментально неблокирующими интерфейсами. Поэтому многим будет полезно иметь хотя бы базовое представление о неблокирующей синхронизации. В этой серии статей я расскажу, что же на самом деле означает acquire и release-семантика, а также приведу пять сравнительно простых паттернов, которые покрывают большинство вариантов использования неблокирующих примитивов.

Читать дальше →
Total votes 39: ↑36 and ↓3+33
Comments60

Сотрудникам нужны личные кабинеты

Level of difficultyEasy
Reading time13 min
Views27K

Во времена «до» мы просто каждый день ходили в офис. Это даже не обсуждалось: «работа из дома» казалась нереализуемой на практике. Чтобы «пойти на работу», нужно было выйти из дома. А потом случилась пандемия.

Теперь, когда она закончилась, даже трёхдневка в офисе вызывает так много споров, что дело доходит до вмешательства профсоюзов
Читать дальше →
Total votes 103: ↑100 and ↓3+97
Comments119

Тестирование SSD на надёжность: 3dnews vs JEDEC vs здравый смысл. Где правда, брат?

Reading time13 min
Views51K


Всем известно легендарное тестирование SSD на надёжность от 3dnews (публикация от 2018.01), по результатам которого некоторые бюджетные накопители превзошли заявленный производителем ресурс в десятки раз.

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

Узнать истинный ресурс бюджетных накопителей
Total votes 61: ↑58 and ↓3+55
Comments56

10 тяжёлых истин о работе программиста, про которые никто не предупреждает

Level of difficultyEasy
Reading time10 min
Views67K

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

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

Всё это приятные бонусы, но никто не говорит им, что на самом деле им придётся делать на этой работе.

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

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

Читать далее
Total votes 185: ↑170 and ↓15+155
Comments417

S3-FIFO: новый эффективный алгоритм вытеснения из кэша на основе очередей FIFO

Level of difficultyMedium
Reading time18 min
Views7.6K
В этой статье я расскажу о простом и масштабируемом (Simple, Scalable) алгоритме вытеснения данных из кэша на основе трёх статических (Static) очередей FIFO (S3-FIFO). После проверки на 6594 трассировках кэшей 14 компаний мы показали, что S3-FIFO имеет меньшую частоту промахов, чем 12 лучших алгоритмов, разработанных в прошлые десятилетия. Более того, эффективность S3-FIFO устойчива — он имеет наименьший средний показатель промахов для 10 из 14 датасетов. Использование очередей FIFO позволяет S3-FIFO достичь хорошей масштабируемости с пропускной способностью в шесть раз больше по сравнению с оптимизированным LRU в cachelib на 16 потоках.

Мы пришли к выводу, что доступ к большинству объектов в смещённых нагрузках кэша выполняется только за короткий промежуток времени, поэтому критически важно быстро вытеснять их из кэша. А главная особенность S3-FIFO — это небольшая очередь FIFO, отфильтровывающая большинство объектов, не давая им попасть в основной кэш.

Иллюстрация работы S3-FIFO (с использованием порогового значения перехода из маленького в основной кэш, равного 1)
Читать дальше →
Total votes 69: ↑69 and ↓0+69
Comments5

Мы сами себя обманули с Биткоином 2

Level of difficultyMedium
Reading time8 min
Views23K

Откупили крипту на платформе, которая не по нраву США? Теперь вы наркодиллер и торговец оружием.

Нет никакой децентрализации, все еще хуже чем в обычном банковском секторе.

Криптовалюту уже задушили, а люди до сих пор с пеной у рта доказывают, что это "свободное будущее". Все на словах только хорошо, а на практике не работает.

На примере РФ, я по фактам расписал как с помощью блокчейновской инфраструктуры можно закрыть всю страну полностью.

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

Это продолжение статьи "Мы сами себя обманули с Биткоином". Для понимания, о чем я буду писать, желательно прочитать ее.

Прочитав все 550 комментариев я полностью убедился в своей правоте - Биткоин не работает. Спасибо всем, кто писал критические комментарии. 

Читать далее
Total votes 150: ↑107 and ↓43+64
Comments111

Мы сами себя обманули с Биткоином

Level of difficultyMedium
Reading time4 min
Views88K

Вы идете в продуктовый магазин, хотите купить бутылку молока. Бутылка стоит 601$, транзакция идет 5 часов, и стоимость бутылки за эти 5 часов прыгает от 500 до 700.

Как вам такое будущее? А ведь именно это и продвигают бешеные криптоманы.

Сразу хочу сказать, я за криптовалюту, я сам работаю в этом секторе.

Я хочу написать о наболевшем:

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

На вершине этого стоит Биткоин, который вообще там, не потому что он самый удобный или правильный, а потому что он просто первый. И ничего более.

Статья будет в более спокойном и сухом формате. Числа и факты.

Читать далее
Total votes 258: ↑202 and ↓56+146
Comments751

DreamBerd — идеальный язык программирования

Reading time12 min
Views25K

DreamBerd - идеальный язык программирования. Вот его фичи!

Когда вы закончите знакомиться со всеми фичами, ознакомьтесь с примерами.

Восклицательные знаки!

Будьте смелее! Заканчивайте каждое утверждение восклицательным знаком!

print("Hello world")!

Если вы чувствуете себя особенно смелым, вы можете использовать еще больше!!!

print("Hello world")!!!

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

print("Hello world")?

Возможно, вам интересно, что Dreambird использует для оператора "не", который в большинстве других языков является восклицательным знаком. Это просто - вместо оператора 'не' используется точка с запятой.

if (;false) {

   print("Hello world")!

}

Читать далее
Total votes 89: ↑86 and ↓3+83
Comments45

Неопределённое поведение в C/C++ и приёмы против лома

Reading time16 min
Views10K

Некоторое время назад в Интернете ходила статья о неопределённом поведении, просто бесившая коренную аудиторию Rust. Завсегдатаи С и C++ в ответ только бурчали, что кто-то просто не понимает Всех Тонкостей и Нюансов Их Светлейшего Языка. Как обычно, пришло время и мне постараться изо всех сил и вставить мои пять копеек в эту застарелую дискуссию.

Готовьтесь поговорить об Основной Проблеме языков C и C++, а также о Принципе Лома.

Читать далее
Total votes 28: ↑27 and ↓1+26
Comments71

Подводные камни C++. Решаем загадки неопределённого поведения, ч. 2

Reading time9 min
Views7.9K

Мы продолжаем цикл статей, посвящённых теме undefined behavior. Ранее мы исследовали предпосылки неопределённого поведения в C++, предоставили формальные определения и рассмотрели несколько примеров. Сегодня углубимся в проблему: сосредоточимся на случаях UB при многопоточности и неправильном использовании move-семантики.

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

Читать далее
Total votes 30: ↑29 and ↓1+28
Comments9

Подводные камни С++. Решаем загадки неопределённого поведения, ч. 1

Reading time11 min
Views15K

Изучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памятью, многопоточность, арифметические вычисления, работу с указателями и так далее.

Под катом мы погрузимся в мир неопределённого поведения в C++ и рассмотрим некоторые примеры ситуаций, в которых оно может возникать.

P.S.: Часть приведённых в статье примеров вдохновлены материалами, которые можно посмотреть в разделе «Полезные ссылки».

Читать далее
Total votes 48: ↑46 and ↓2+44
Comments44

Первые новинки C++26: итоги летней встречи ISO

Reading time11 min
Views21K

На недавней встрече комитет C++ активно взялся за C++26. Уже есть первые новинки, которые нас будут ждать в готовящемся стандарте C++:

  • улучшенный static_assert,
  • переменная _,
  • оптимизация и улучшение для std::to_string,
  • Hazard Pointer,
  • Read-Copy-Update (так же известное как RCU),
  • native_handle(),
  • целая вереница классов *function*,
  • множество доработок по constexpr,
  • std::submdspan,
  • и прочие приятные мелочи.

Рассмотрим новинки на примерах
Total votes 66: ↑64 and ↓2+62
Comments119

Я люблю питон, и вот почему он меня бесит

Level of difficultyEasy
Reading time18 min
Views56K

Вас приветствует ваш зануда!

Если вы следите за моей ленивой активностью, то заметили бы, что у меня много от чего пригорает. Вот, например:
- У меня пригорает от низкосортных статей на потоке: Питон против Безумного Макса, или как я посты на Хабре замораживал
- У меня пригорает от Django: Окей, Джанго, у меня к тебе несколько вопросов
- И от Яндекса тоже: Собеседование в Яндекс: театр абсурда :/
- И от рекрутеров: Я единственный из 1400, или самый крутой рекрутинг, что я проходил

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

Это что же получается, kesn опять открыл postman и сломал вёрстку на сайте? Поразительно, никогда такого не было, и вот опять! В принципе, тут можно писать текст любой длины (похоже, у них на бэкенде не Char(255), а Text). Они проверяют длину только на фронтенде, а бэкенд принимает строку любой длины. И это, блин, забавно) Вообще мой девиз - 'кто ищет, тот всегда найдёт', поэтому я ищу постоянно. Кстати, на Хабре скоро выйдет статья про программирование глазами Погромиста, там в том числе про уязвимости на сайтах будет - поэтому если не хотите пропустить, то подписывайтесь на меня в телеге: @blog_pogromista
Total votes 248: ↑238 and ↓10+228
Comments143

Неизвестный UART: микросхемы

Level of difficultyMedium
Reading time23 min
Views17K

Как было сказано в предыдущей статье, UART не является формализованным стандартом и, следовательно, при его использовании имеет смысл опираться на практику реализаций данного протокола в различных микросхемах. В данной статье будут рассмотрены микросхемы мостов USB‑UART различных производителей как с точки зрения особенностей поддержки протокола, так и с точки зрения временных/электрических характеристик, а также иных, в том числе не‑электронных соображений.

Запаять SSOP-20
Total votes 76: ↑75 and ↓1+74
Comments57

Как «эффективный менеджмент» создаёт катастрофы: изучаем причины техногенных аварий. Часть 1

Level of difficultyEasy
Reading time17 min
Views73K

Когда в бизнес приходят «эффективные менеджеры», стоит ждать беды. С программами урезания расходов, подкручиваниями KPI и прочими странными решениями бизнес может в краткой перспективе получить даже какую‑то выгоду для себя, но довольно быстро сталкивается с проблемами: сложно продать или просто угробить курицу, несущую золотые яйца, и ожидать, что золотые яйца продолжат появляться.

Иногда решения этих эффективных менеджеров и вовсе приводят к техногенным катастрофам: крупным авариям с большим количеством пострадавших или даже погибших. В этой и следующей публикации мы с вами разберём больше дюжины подобных случаев, чтобы понять, какие ошибки, решения и системные проблемы к этому привели. Чтобы выделить, что не должен делать и чего должен остерегаться бизнес, чтобы не допускать воплощения критических рисков? Ведь для любого бизнеса могут сложиться обстоятельства, которые фактически мгновенно прекратят его работу, и в руках руководства — возможности и инструменты, которые бы предотвратили такой печальный исход.

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

Погрузиться в бездны катастроф
Total votes 239: ↑235 and ↓4+231
Comments373

Механические клавиатуры 2023. Продолжение

Reading time29 min
Views32K

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

Читать далее
Total votes 65: ↑65 and ↓0+65
Comments63

То, чего еще никто не писал про Нокиа, Элопа и горящую платформу

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

Традиционно, для тех кто не любит много буков, краткие (более-менее) тезисы:

  • Будучи долгое время лидером на рынке, Нокиа сильно расслабилась и загадила свою внутреннюю инфраструктуру бюрократией, чрезмерным аутсорсингом и огромным количеством бесполезной «менеджерской прослойки».
  • Будучи долгое время лидером, Нокиа просрала потратила много денег на ненужные операционные расходы, поглощения никому не нужных фирм и на невменяемую модель аутсорсинга.
  • Полностью оторвавшись от реальности с уходом Йормы Оллилла, Нокиа, под управлением гениального юриста CEO Олли-Пекки Каласвуо, потратила кучу денег и усилий на создание бесполезной и неконкурентоспособной сервисной инфраструктуры Ovi. В результате этого, помимо денег, Нокиа потеряла уйму полезного времени, которое можно и нужно было потратить на развитие основного бизнеса — телефонов, софта и т.д.
  • Бюрократия и непотопляемая менеджерская прослойка в Нокиа, последовательно мигрировала из одного передового проекта в другой, в составе одних и тех же групп лиц, самореплицируясь в виде кучи формальных дебилопроцессов комитетов и управленческих групп, немного перетасовываемых с учетом специфики. В итоге именно эта бюрократия убила и Symbian, и Ovi, и MeeGo и остальные попытки догнать уходящий поезд своими силами.
  • Борьба с бюрократией и прослойкой в Нокиа зашла в полный тупик.
  • У великого CEO Элопа просто не было другого выхода кроме как прибить всю старую, неповоротливую и прогнившую организацию, путем создания альянса с Майкрософтом и переходом на Windows Phone. Тем самым все старые процессы, компетенции, технологии и самое главное — люди резко стали, что называется, «не в тему». И следовательно тем самым можно было под благовидным предлогом прибить этот табун менеджеров, бесконечно рисующих фэнтезийные роадмапы с единорогами и перекладывающих бумаги с левого края стола на правый.
  • Новая Нокиа, после 2011 года и старая Нокиа до 2011 года – это две РАЗНЫЕ организации. Их объединяет только общее название и операционка S40 для телефонов Asha.
  • Горящая платформа, это не Symbian и не MeeGo. Горящая платформа, это то состояние в которое Нокиа загнали годы расслабленного лидерства и тупоголовые амбиции предыдущего CEO – Олли-Пекки Каласвуо с кликой подкаркивающих вице-президентов.
  • С бюрократией и бизнес процессами, имеющимися на 2010 год, Нокиа не спас бы ни Андроид, ни половина населения Бангалора, пишущих на Qt под MeeGo. Даже если бы Apple бесплатно передал Нокиа iOS и все сервисы, то они бы выродились руками всяких Requirement Managerов в типичные Нокийские дизайн-химеры и в итоге загнулись через какое-то время.
  • То, что сделал великий CEO Элоп – было единственно возможным разумным решением, дающим хоть какие-то шансы на выживание. Вопрос «каким образом он это сделал?», остается открытым, равно как и вопрос «поможет ли это Нокиа?» в итоге. Не следует забывать, что нынешняя Нокиа — это совершенно новая организация, поэтому глупо предполагать, что она разом вернет себе лидерство. Как и всем новым организациям ей придется за это лидерство долго бороться.
  • Без ошибок и побед Нокиа никогда не было бы ни Андроида, ни Айфона. И Google и Apple тщательно проанализировали достоинства и недостатки более старших конкурентов перед тем как шагнуть вперед.

Все это в деталях — под катом. Предупреждаю что клевых картинок там нет. Сплошное графоманство и ёрничанье.
Читать дальше →
Total votes 548: ↑505 and ↓43+462
Comments330

Слышали ли вы про язык «e»? А ведь он был продан за $315 миллионов долларов

Reading time10 min
Views37K

Все знают про язык программирования C, поменьше — про язык программирования F, кое‑кто про B, предшественник C, а вот знаете ли вы про язык «e»? Их кстати два — один с большой буквы «E», а другой с маленькой «e».

Вы наверное подумали, что это еще один безызвестный язык от какого‑нибудь аспиранта провинциального европейского университета. Однако интерпретатор маленького «e» под названием Specman продали в 2005 году большой компании Cadence Design Systems за $315 милионов долларов. Причем президента продающей компании Verisity звали Гаврилов. Также можно нагуглить, что этот язык использовали внутри компании Intel. Что же в нем такого, что вызвало интерес у толстых богатых корпораций?

Читать далее
Total votes 63: ↑53 and ↓10+43
Comments47

Заблуждения программистов о тексте

Reading time11 min
Views19K


Возжелавший прильнуть к жанру вестернов обратится либо к десятой строчке топ-250 лучших фильмов по версии IMDb, либо уже будет обладать знанием, что начинать нужно с «Хороший, плохой, злой». Там он увидит жадных потных мужчин, которые заканчивают фильм напряжённым мексиканским противостоянием. Жалкая охота за золотом конфедератов разворачивается на фоне кровавых битв Гражданской войны между «Севером» и «Югом». Таким зритель запомнит вестерны как жанр.

В реальности «Хороший» — это не классика, а яркий представитель поджанра ревизионистских вестернов, снят в Европе и наоборот, критикует американскую идеологию направления. В нём нет ничего общего с картинами, где герой встаёт на защиту правильного и справедливого общества от злодеев или кровожадных индейцев. В пятидесятых и шестидесятых классический вестерн сошёл на нет, но в коллективном сознании критика быстро заместила критикуемый объект. Когда Марти Макфлай жалуется на анахронизм наряда, он сравнивает себя с антигероями Клинта Иствуда, а не бравыми ковбоями в исполнении Джона Уэйна.

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

Заблуждение 1. Любые символы, кроме управляющих, имеют предсказуемую ширину


В реальности ширина символов может отличаться даже в моноширных шрифтах.
Читать дальше →
Total votes 96: ↑96 and ↓0+96
Comments51
1
23 ...

Information

Rating
3,588-th
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity