Search
Write a publication
Pull to refresh
3
0
Send message

Потокобезопасный std::map с производительностью lock-free map

Reading time21 min
Views34K

Примеры использования и тестирование потоко-безопасного указателя и contention-free shared-mutex


В этой статье мы покажем: дополнительные оптимизации, примеры использования и тестирование разработанного нами потоко-безопасного указателя с оптимизированным разделяемым мьютексом contfree_safe_ptr<T> – это эквивалентно safe_ptr<T, contention_free_shared_mutex<>>
В конце покажем сравнительные графики тестов нашего thread-safe указателя и одних из лучших lock-free алгоритмов из libCDS на процессорах Intel Core i5/i7, Xeon, 2 x Xeon.
Читать дальше →

Ускоряем std::shared_mutex в 10 раз

Reading time35 min
Views56K
В этой статье мы детально разберем атомарные операции и барьеры памяти C++11 и генерируемые ими ассемблерные инструкции на процессорах x86_64.

Далее мы покажем как ускорить работу contfree_safe_ptr<std::map> до уровня сложных и оптимизированных lock-free структур данных аналогичных по функциональности std::map<>, например: SkipListMap и BronsonAVLTreeMap из библиотеки libCDS (Concurrent Data Structures library): github.com/khizmax/libcds

И такую многопоточную производительность мы сможем получить для любого вашего изначально потоко-небезопасного класса T используемого как contfree_safe_ptr<T>. Нас интересуют оптимизации повышающие производительность на ~1000%, поэтому мы не будем уделять внимание слабым и сомнительным оптимизациям.
Читать дальше →

Магические константы в алгоритмах

Reading time6 min
Views24K

Введение


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

Wap-Click: простой вариант поиметь (денег с) абонента

Reading time3 min
Views71K

Относительно честные способы отъема денег у населения — популярный вид заработка, знаете ли. Уверен, вы слышали о подписках. Или даже платили за них. Операторы сотовой связи зовут такие услуги по разному: «Мой контент», «Контент-подписки», но суть одна. Для оказания таких услуг (по заверениям ОпСоСов) вы должны сначала указать свой номер, получить SMS с подтверждающим кодом, ввести этот самый код, а после вам еще и условия в сообщении пришлют. Видите, как всё честно! Так откуда же берутся все эти несчастные люди, которые утверждают, что их одурачили, обманом списали деньги и возвращать не собираются? Наверное они по глупости не туда нажали да и подписались. Всякое же бывает. Вон однажды моя бабушка зарегистрировалась вместо «Одноклассников» в «Сексоклассниках» или как-то так. Зрение уже не то, сами понимаете. Впрочем, она старушка любопытная, может и не ошиблась. Но вы то все молодые и смекалистые! Вас так просто не возьмёшь. Кто в здравом уме будет SMS на короткие номера отправлять, правда же? А что, если я скажу вам, что никого подтверждения не нужно? И никакой информации о подписке вы не получите. А единственный способ узнать о списаниях — посмотреть детализацию. Такие дела.
Читать дальше →

Быстрый роуминг (802.11r) в WiFi сети на базе Lede (aka OpenWRT)

Reading time3 min
Views58K
Всем привет. Решил я закрепить полученный результат написав статью. А результат этот — это объединение нескольких WiFi точек доступа в сеть в одну неразрывную сеть, ещё её называют бесшовную. Смысл сего действия состоял в том, что моя «локальная» домашняя сеть разрослась до нескольких WiFi точек по причине её (сети) большой площади и невозможности достичь надлежащего качества всего одной точкой.

image
Читать дальше →

Как я писал предложение к стандарту С++

Reading time4 min
Views25K
Это будет история младшего разработчика из Яндекс.Паспорта о появлении предложения в стандарт С++, разработанного в соавторстве с Антоном antoshkka Полухиным. Как часто бывает в жизни, что-то новое началось с боли, а точнее — с желания её прекратить.


Жила-была библиотека у меня на поддержке. Всё у неё было хорошо: собиралась под Linux, работала, не падала. Однажды пришли люди с просьбой (требованием) собрать её под Windows. Почему бы и нет? Но с первого раза не получилось. Корнем зла оказалась рукописная криптография, которая в какой-то момент умножала два 64-битных целых числа. Для сохранения результата такого умножения потребуется число на 128 бит, и в библиотеке использовался тип __int128. Он прекрасен: имеет естественный интерфейс, поддерживается несколькими компиляторами (gcc, clang), работает без аллокации памяти, но главное — он есть.

Читать дальше →

20 интересных наблюдений, которые я привез из Штатов и Долины

Reading time9 min
Views14K


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

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

В этом году для моей поездки в Штаты я выбрал совсем другую цель — вместе с директорами IT-компаний мы отправляемся в Road Show за новыми заказами. Но это будет другая история. А в этой статье я расскажу о 22х самых удивительных вещах, которые запомнились мне с прошлой поездки. Поехали.
Читать дальше →

Генератор тестовых данных для C++

Reading time4 min
Views10K

image


При unit-тестированиии кода рано или поздно встает вопрос тестовых данных. И если в одном случае достаточно просто несколько жестко зашитых переменных, то в других случаях необходимы сколько-нибудь большие и случайные данные. В управляемом мире нет проблем с генерацией пользовательских типов (взять тот же Autofixture), но мир C++ зачастую вызывает боль и страдание (поправьте меня, если это не так). Не так давно я познакомился с замечательной библиотекой boost::di и под ее влиянием у меня начала созревать идея библиотеки, которая позволила бы C++ программистам генерировать пользовательские типы данных, забитых случайными значаниями, и это не потребовало бы предварительного их описания. Получилось что-то вроде:


struct dummy_member{
    float a;
    int b;
};
struct dummy{
    explicit dummy(dummy_member val, std::string c) : val_(val), c_(c) {}
private:
    dummy_member val_;
    std::string c_;
};
int main(int argc, char* argv){
    auto d = datagen::random<dummy>();
    return 0;
}

Ссылка на код. Библиотека header-only,C++14. Всех интересующихся прошу под кат.

Читать дальше →

Переход с bash на zsh

Reading time12 min
Views206K

Чтобы перейти с bash на zsh необходимо знать базовые отличия между ними — без этого будет сложно провести первоначальную настройку zsh в ~/.zshrc.


Я не нашёл краткого описания этих отличий когда переходил сам, и мне пришлось потратить немало времени на вычитывание документации zsh. Надеюсь, эта статья упростит вам переход на zsh.


Зачем переходить


Для начала — а стоит ли вообще тратить своё время и внимание на переход? Учить ещё один диалект sh, менее распространённый чем POSIX sh или bash, заново заниматься настройкой рабочего окружения…


На мой взгляд, если вы проводите много времени в консоли, вам нравятся Vim или Emacs и вы уже потратили немало времени на их настройку "под себя" — однозначно стоит! Zsh по духу очень на них похожа: это очень сложная и гибкая программа, чьи возможности полностью мало кто знает, но потратив некоторое время на настройку можно получить очень удобную лично вам рабочую среду.

Читать дальше →

HiDPI в Linux, в частности в KDE

Reading time9 min
Views49K
Мониторы разрешением в 4K перестали считаться уделом буржуев и понемногу входят в жизнь простого люда. Равно как и мониторы других высоких разрешений. Ещё пару лет назад я про поддержку таких мониторов в Linux говорил, что «скорее нет, чем да». Поддержка вроде была, но количество глюков с ней делало весь процесс бессмысленным, и очень хотелось переключить монитор на разрешение поменьше. Чего некоторые 4K мониторы не позволяют в Линуксе делать до сих пор. Дело в том, что драйвера NVidia при подключении по DisplayPort наивно верят EDID монитора, и если там прописано только одно максимальное разрешение — не позволяют ставить никакое другое. Надо либо откатываться на Nouveau, либо настраивать HiDPI. Будем настраивать! (Статья рассчитана на человека, знающего основы Linux и что такое X сервер).
Читать дальше →

Создание барабанного круглошлифовального станка

Reading time7 min
Views20K

Введение, предыстория


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

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

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


Читать дальше →

Почтовый сервер на Linux

Reading time11 min
Views326K
Как наладить работу почтового сервера, умеющего принимать и отправлять электронную корреспонденцию, бороться со спамом, взаимодействовать с клиентами? На самом деле, всё довольно просто.

Сегодня поговорим о почтовых серверах на Linux. Мы расскажем о том, как настроить сервер, о широко распространённом в интернете протоколе SMTP, а также о других протоколах, таких, как POP и IMAP. В итоге вы окажетесь обладателем полноценной системы для работы с электронной почтой.



Начнём с SMTP-сервера на Linux
Читать дальше →

Борьба бобра с ослом, или Адаптация MSVC кода под gcc

Reading time3 min
Views9.4K

Статья описывает некоторые затруднения, которы мы встретили при попытке адаптации одного из наших старых Windows-only проектов (плагин к MT4 серверу) к кросскомпиляции под Linux (CI, статический анализ, автотесты и прочие модные слова). Точнее, в коде присутствовал ряд конструкций, которые спокойно съедались MSVC, но категорически отказывались компилироваться с использованием mingw/gcc.


image


Под катом 7 наиболее часто встретившихся примеров кода, которые будут компилироваться MSVC, но не будут с gcc, и способы это лечить.

Читать дальше →

Экскурсия на московское производство компонентов для сетей связи. Часть первая

Reading time11 min
Views12K
Наш давний партнер — «Связьстройдеталь», пригласила нас на экскурсию по своему производству. Мы прошлись по цехам, познакомились с оборудованием, рассмотрели экспозицию и узнали, почему компании не страшны китайцы и как ей живется в реальности «канбан» и «6 сигма».



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

PVS-Studio и GitHub-сообщество: начало дружбы

Reading time6 min
Views10K
Некоторое время назад было принято решение сделать статический анализатор кода PVS-Studio бесплатным для отдельных категорий разработчиков: студентов в учебных целях, индивидуальных разработчиков и коллективов энтузиастов. Постепенно количество бесплатных пользователей увеличивается, но мы решили напомнить о такой возможности, так как многие разработчики могли пропустить соответствующую новость.

Picture 1


Итак, всё началось со статьи: Как использовать PVS-Studio бесплатно.
Читать дальше →

UNIX-подобные системы содержат кучу костылей. Крах «философии UNIX»

Reading time29 min
Views107K
UPD от 2017-03-04: кто-то выполнил английский перевод. Обсуждение на Hacker News.

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

Костыли в UNIX начали возникать ещё с момента появления UNIX, а это было ещё раньше появления не только Windows, но даже вроде бы Microsoft DOS (вроде бы, мне лень проверять, проверяйте сами). Если лень читать, хотя бы просмотрите все пункты, что-нибудь интересное найдёте. Это далеко не полный список, это просто те косяки, который я захотел упомянуть.
Читать дальше →

Гомеопатия — инструмент естественного отбора

Reading time12 min
Views85K
image

В потоке мрачных новостей последних месяцев меморандум РАН о признании гомеопатии лженаукой можно назвать долгожданным торжеством здравого смысла. Однако, все прошло не так гладко, как ожидалось, и у гомеопатии нашлись свои защитники.

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

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

Один из членов комиссии по борьбе с лженаукой РАН, российский биоинформатик, популяризатор науки, научный журналист и писатель, лауреат премии «Просветитель» Александр Панчин рассказал нам, что недовольство гомеопатией в РАН зрело давно. «Отдельные члены рабочей группы и Комиссии говорят о лженаучности гомеопатии уже много лет», — сказал он. Немаловажное значение Панчин отводит появлению в арсенале РАН нового инструмента — меморандумов, через которые Академия и конкретно комиссия по лженауке могут транслировать для общества позицию ученых по различным вопросам.
Читать дальше →

Верификация конечного автомата

Reading time7 min
Views12K
Всем привет! Эта статья будет посвящена верификации дизайна конечного автомата управления торговым устройством vending machine, описанного на языке Verilog (дизайн) и System Verilog (верификация).

Вообще в основе публикации лежит мой курсовой проект, который был оценен моим преподавателем по достоинству с предложением сделать публикацию на Хабре.

Основное на чем я хочу акцентировать внимание — это описания типичных блоков multilayer testbench и применение некоторых базовых конструкции языка SystemVerilog и верификации. В основе подхода, который я использовал лежит так называемая Open Verification Methodology (OVM) с изменениями, которые упрощали разработку проекта и были удобны персонально мне.

Итак, поехали!
Читать дальше →

Проектирование импульсного источника питания с активным ККМ. Эпизод I

Reading time28 min
Views197K

Предисловие


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

Еще одной причиной отсутствия статей была моя работа в одной «современной успешной IT-hardware-компании», сейчас наконец-то я ее покинул и окончательно пересел на фриланс, так что время для статьи появилось))

Недавно ко мне обратился мой старый наставник и просто очень хороший человек. Естественно я не мог отказать в помощи, а оказалось все достаточно просто — меня попросили сделать блок питания для КВ трансивера FT-450, который будет более стабильный в работе, особенно при пониженном входном напряжении, чем уже имеющийся Mean Well. Прошу заметить, я не говорю о том, что Mean Well плохая фирма, просто в данном случае нагрузка достаточно специфическая, а так продукция у них вполне себе хорошая.

Диагноз примерно такой:


— Заявлен выходной ток в 40А, на деле при потреблением в 30-35А (на передаче) блок уходит в защиту;
— Наблюдается сильный нагрев при длительной нагрузке;
— Совсем становится плохо, когда использует его на даче, где напряжение в сети 160-180В;
— Напряжение максимальное 13,2-13,4В, а хотелось бы 13,8-14В с возможностью подкрутить +-20%.

Особенностью данной статьи будет то, что проект продвигается вместе с ней. Я за него только засел и поэтому смогу рассказать обо всех этапах разработки: от ТЗ до готового прототипа. В таком формате статей с наскоку на гике я не нашел, обычно люди пишут уже проделав всю работу и забыв половину мелочей, которые часто несут в себе главный интерес. Так же эту статью я хочу написать доступным для новичков языком, поэтому местным гуру стоит чуточку проще относиться к «неакадемичности» моего слога.
Читать дальше →

О строковом форматировании в современном C++

Reading time9 min
Views156K

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

Читать дальше →

Information

Rating
Does not participate
Registered
Activity