#%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

2024-12-26

10 самых интересных ошибок в Java проектах за 2024 год

В 2024 году мы проверили много проектов, о чём регулярно писали в свой блог. Теперь же настала новогодняя пора, и самое время рассказывать новогодние истории. Вот и мы решили поведать о самых интересных Java ошибках, встреченных нами в Open Source проектах.

habr.com/ru/companies/pvs-stud

#топ10 #опечатки #ошибки #java #opensource #параллельное_программирование #паттерны #тесты #микрооптимизация #pvsstudio

2024-10-30

Параллелизм и феномен ван дер Поля

Зачем нужны потоки, если есть параллелизм ВКПа? Поговорим об этом подробнее. По существу мы тем самым продолжим тему статьи[ 1 ], рассмотрев только более сложный пример, чем простые и абстрактные счетчики. Рассмотрим по ходу сначала пример, а уж потом и его реализацию на потоке. Поехали?!

habr.com/ru/articles/854814/

#конечные_автоматы #simintech #вкпа #с++ #параллельное_программирование

2024-09-10

Реализация мечт (нечеткая логика)! Пошаговый рецепт

Есть задача, а для кого-то почти мечта - реализовать нечеткую математику в ВКПа. И здесь отдельное спасибо Вячеславу Петухову за материал, ставший основой похода в нечеткую логику на базе автоматов. Правда, сам Вячеслав высказался отрицательно о реальности подобного "блицкрига", но, ведь, когда есть цель и неистребимое желание ее достичь, то, порой, даже невозможное становится возможным. Мне же, что там скрывать, очень захотелось в ВКПа создавать объекты на основе нечеткой логики, аналогичные объектам в SimInTech. Тем более, что когда-то теория нечетких множеств привлекала мое внимание, а понятие нечеткого регулятора и сейчас, если честно, бередит мои мысли... Чтобы от чего-то оттолкнуться, был выбран проект из каталога демо-примеров платформы SimInTech из подкаталога "Автоматика и математика\Нечёткая Логика\Система поддержания уровня воды в баке". И на момент начала написания данной статьи мною уже были успешно реализованы некоторые из типовых блоков библиотеки "Нечеткая логика" платформы SimInTech (см. рис. 1). Заметим, что дополнительную информацию о нечеткой логике можно почерпнуть из справки платформы SimInTech, зайдя в раздел "Лабораторные работы по ВУЗам", затем в "Московский Политех" и в завершение - "Разработка системы нечеткого вывода".

habr.com/ru/articles/842178/

#нечеткая_логика #параллельное_программирование #проектирование_промышленного_по #с++ #будущее_рядом

2024-07-31

Как мы написали конкурентные структуры данных на C++ и научились их верифицировать

Привет! В команде ВКонтакте мы переписываем рантайм движков баз данных — они становятся быстрее, надёжнее, а ещё с новым рантаймом проще писать код. Однако есть нюанс: в новом рантайме много конкурентных структур данных, в том числе нужных для работы с корутинами из С++20. Появляется интересная задача — проверять корректность этих конкурентных структур данных до выхода кода в продакшен. Для решения этой задачи команда ВКонтакте вместе со студентами из университетов ИТМО и СПбГУ работала над научно-исследовательским проектом — верификацией конкурентных структур данных на языке C++. В этой статье подробно расскажем, как мы в рамках проекта проверяли корректность наших конкурентных структур данных и заодно исправили найденную в нашем новом рантайме ошибку.

habr.com/ru/companies/vk/artic

#concurrency #корутины #каналы #верификация #c++ #многопоточность #параллельное_программирование #tla+

2024-06-21

Интеллект искусственный и натуральный. Опыт общения

Ниже приведен вопрос, заданный искусственному интеллекту (ИИ). Поскольку был использован сайт Chad AI, который использует Chat GPT, то с последним и будем идентифицировать "личность" нашего ИИ. Какие преследовались цели, затевая общение с ИИ? Любопытно было узнать о его просвещенности в автоматном программировании (АП)? Если ему о нем что-то известно, то хотелось бы понимать меру этого знания и какое его определение он приведет? А тут возможны варианты. Определение может совпадать с авторским пониманием АП[1], но может быть и другим. А это особенно интересно: как трактуется понятие АП в мире вообще и/или "интеллектом" в частности? Ведь ИИ по умолчанию должен быть более информированным, чем любой "натурал" - натуральный интеллект (НИ). Последний сосредоточен часто только на своей идее и, кроме того, ему по больше части не доступен столь же огромный объем информации, который "подсунули" во время обучения ИИ. Итак, вопрос ИИ: Сформулировать, что собой представляет автоматное программирование, дав его 1) формальное определение и 2) примеры практической реализации, 3) пусть, немножко хотя бы, коснется истории его развития (если оно и эта история есть, конечно). Был получен следующий ответ (орфография и пунктуация сохранены): 1. Автоматное программирование представляет собой методологию построения программного обеспечения, основанную на использовании автоматов, то есть моделей, которые принимают входные данные, выполняют определенные действия и возвращают результат. Основная идея заключается в том, что программа описывается как последовательность состояний и переходов между ними, что позволяет представить ее как автомат.

habr.com/ru/articles/823606/

#автоматное_программирование #теория_автоматов #параллельное_программирование #искусственный_интеллект

2024-06-12

Засады многопоточности

В данной статье я опишу свои самые свежие и яркие впечатления от многопоточного программирования. Это мои впечатления, мой опыт и я буду рад, если он будет полезен другим программистам. В крайней статье я утверждал, что более серьезные проблемы их поджидают в случае взаимодействующих потоков. Но одно эти проблемы предполагать или даже предсказывать, а другое - столкнуться с ними непосредственно. Предсказанное сбылось, как говорится, по полной программе. Думаю, что озвученные далее проблемы для кого-то не станут новостью, но будут и те, кто о них не подозревает, как не подозревал и я. А потому захотелось их зафиксировать и поделиться, с чем пришлось столкнуться. Ну, и рассказать, как я выкрутился, попав в не совсем привычные для меня ситуации (в автоматном программировании, подчеркну, они не возникли бы в принципе). Итак, создав ранее тест потоков (о нем подробнее см. [1]), гоняя его многократно и в разных режимах, я заметил, что пусть редко, но выскакивают некорректные результаты. В подобных случаях я грешу обычно на себя. А в данном случае тем более, т.к., что там скрывать, имею весьма небольшой опыт использования потоков. Но в процессе экспериментов обнажились проблемы, которые сложно списать на недостаток опыты. Что-то при этом удалось преодолеть сразу, с чем-то пришлось повозиться, но были и те проблемы, которые не удалось поправить, даже при наличии достаточно большого опыте в программировании вообще. О последнем, не об опыте, конечно, а о проблемах, и пойдет далее речь... И даже не о проблемах, а о довольно нежданных и негаданных "засадах", возникших на пути освоения многопоточности.

habr.com/ru/articles/821283/

#автоматное_программирование #с++ #qt #многопоточность #параллельное_программирование

2024-06-05

Ловушки volatile, DCL и синхронизации в Java

А что если окажется, что простые знания на самом деле более нюансированные, а старые знакомые, такие как Double-checked locking, являются неоднозначными? Именно на такие мысли наталкивает изучение кода реальных проектов. Результаты этого исследования мы и рассмотрим в этой статье.

habr.com/ru/companies/pvs-stud

#volatile #java #dcl #doublechecked_lock #doublechecked_locking #race_condition #dbeaver #parallel_programming #параллельное_программирование #состояние_гонки

2024-06-02

Все секреты многопоточности

Disclaimer. Данная работа не повлияла на мои взгляды на программирование, но повлекла достаточно радикальные изменения в подходах к проектированию автоматных объектов. Теперь, если процесс автономен и/или не предъявляет требований к синхронизации, он может использовать другие механизмы параллелизма, не переставая при этом быть автоматным по сути. А почему так случилось, что этому предшествовало и что это за изменения, вы прочтете далее. Это не самая большая моя статья (так я думал, начиная ее), над которой я работал, пожалуй, дольше и больше, чем над другими. Но это точно первая моя статья, в которой автоматы и ВКПа не будут главной темой. Тема потоков для меня достаточно необычна, т.к. я совсем не фанат многопоточного программирования. Но, тем не менее, занимаясь параллельным программированием, время от времени возвращаюсь к теме многопоточности. И вот, чтобы добыть какие-то аргументы для критики и одновременно попробовать найти практическое применение потокам, я решил в этот очередной раз более плотно заняться потоками. А что из этого получилось, читайте далее.

habr.com/ru/articles/818903/

#автоматное_программирование #с++ #многопоточность #параллельное_программирование

2024-04-19

Вы все еще пишете многопоточку на C++ с ошибками синхронизации?

Привет, коллеги! В этой статье я покажу свой подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации. Демонстрация идеи будет проходить на живых примерах кода на современном C++. Большинство описанных решений я применял сначала на собственных проектах, а теперь часть этих подходов уже используется в нашей собственной микроядерной операционной системе «Лаборатории Касперского» (KasperskyOS) . Сразу хочу оговориться, что тема многопоточности — очень большая и серьезная. И эта статья — не полноценный анализ проблем многопоточки, а только частНЫе (но довольно частЫе) кейсы, когда мы вынуждены использовать мьютексы.

habr.com/ru/companies/kaspersk

#c++17 #performance #multithreading #mutex #synchronization #информационная_безопасность #кибербезопасность #безопасность #уязвимости #кибератаки #разработка #c++ #программирование #с++ #си++ #open_source #статический_анализ_кода #kasperskyos #параллельное_программирование #многопоточность #concurrency #параллельные_вычисления

2024-04-02

Rust — это не «memory safe C»

TL;DR: 1) в Rust намного больше достоинств, чем просто скорость и безопасность 2) в Rust по умолчанию CDD (compiler-driven development, разработка через компилирование). Это как TDD , только CDD 3) Rust не сложный язык, особенно если не гнаться за максимальной производительностью В этой статье я бы хотел рассказать: 1) почему взгляд на Rust как на "memory safe C" очень сильно сужает область его возможного применения 2) почему я смотрю на Rust как на очень удобный в разработке язык высокого уровня, которому просто случайно повезло оказаться невероятно быстрым 3) почему разработка на Rust быстрее, чем многие думают 4) почему Rust это один из лучших языков общего назначения

habr.com/ru/articles/804915/

#Rust #рефакторинг #тестирование #параллельное_программирование #скорость_разработки

2024-03-28

Как работает multiprocessing в Python под капотом

Я довольно давно пишу на Python и во многих проектах использовал multiprocessing — пакет стандартной библиотеки языка Python, который предоставляет интерфейс для работы с процессами, очередями, пулами процессов и многими другими удобными инструментами для параллельного программирования. В какой-то момент я понял, что мне не хватает более детального понимания работы этой библиотеки. Мне захотелось залезть в исходники multiprocessing, разобраться и заодно написать статью. Данная статья в основном рассчитана на новичков в Python и тех, кто хочет подробнее разобраться в том, как именно создаются процессы и пулы в Python и погрузиться в детали реализации.

habr.com/ru/articles/803607/

#python #multiprocessing #параллельное_программирование #процессы

2024-03-01

[Перевод] Xv6: учебная Unix-подобная ОС. Глава 6. Блокировки

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

habr.com/ru/articles/797557/

#xv6 #блокировки #прерывания #взаимоблокировки #потоки #параллельное_программирование #многопоточность #pthreads #lockfree

2024-02-03

Async/Await в C#. Часть 5. Функция-перечисление и цикл через рекурсию, асинхронный вызов без Async/Await

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

habr.com/ru/articles/790944/

#async/await #continuations #task #асинхронное_программирование #параллельное_программирование

2024-01-29

Python Multiprocessing. Обмен данными между процессами. Передача объектов пользовательских классов

Параллельное программирование — сложный, но очень полезный навык для программиста. Оно позволяет эффективно использовать мощности современных компьютеров с несколькими ядрами и процессорами. Это особенно важно при решении сложных задач, например, в инженерных расчетах, обработке мультимедийных данных, обучении нейросетей и многом другом. Модуль Multiprocessing позволяет использовать так называемый истинный параллелизм, то есть создавать процессы, которые выполняются полностью независимо друг от друга. В этом случае процессы не имеют общей памяти и не могут просто так читать и изменять одни и те же переменные. Конечно же, в модуле multiprocessing реализован нативный способ передавать данные между процессами, и даже не один. Однако как только мы отходим от встроенных типов данных, то готовые решения уже не работают. О том, как с этим обходиться, я и расскажу в этой статье.

habr.com/ru/articles/789904/

#multiprocessing #DataManager #SyncManager #shared_memory #параллельное_программирование #параллелизм #процесс

2023-12-30

Синхронизация операций в .NET на примерах

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

habr.com/ru/articles/784134/

#net #параллельное_программирование #синхронизация #lock #mutex #semaphore #interlocked #c# #программирование

2023-12-12

Держись, Маша! Ты, ведь, наша! Продолжение разбора книги «Цифровая схемотехника и архитектура компьютера»

Упомянутая в заглавии книга (далее H&H) - это про железо [15]. Я - про программирование, но на базе "железной модели" конечного автомата. И там и там математическая основа одна. Все это, действительно, крутая железная концепция, помогающая поставить не только синтез цифровых схем, но и программирование на совершенно другие рельсы, определяющие его будущее. Параллелизм у программистов нынче в моде. Но, видимо, они (программисты) совсем не в курсе, что разработчики железа давным-давно погружены в эту тему. А потому им (я все про программистов) есть у кого поучиться. Но, похоже, некие амбиции-заскоки этому мешают. Но, если вы этим не страдаете, то прочитайте книгу H&H и дойдите, ну, хотя бы до 4-й главы. Попробуйте реализовать одно-два упражнения, используя свой, программистский инструментарий - всякие там корутины, потоки и весь сопутствующий этому террариум. Убедитесь в его полном бессилии. И тогда, может, это заставит кое-что пересмотреть, переосмыслить. Только представьте: логический элемент - отдельный процесс, десятки, сотни, тысячи элементов - множество параллельных процессов, и все это в вашей ладошке (это я про смартфон) и даже работает! Но пришло время исполнять обещанное (см. предыдущую часть темы в [1]). И пусть количество "плюсов" пока не достигло заданной планки, но ... если каждый "минус" считать за два "плюса", то это уже более чем ... ;) Так что спасибо всем, давшим положительную оценку - нет, не автору, а затронутой теме. Области знаний, от которой многое сейчас зависит. Это те слова, которые мы вправе сказать в адрес теории, посвященной синтезу цифровых схем, в адрес тех, кто занимался и занимается ее развитием, становлением и внедрением в практику.

habr.com/ru/articles/780162/

#автоматное_программирование #параллельное_программирование #профессиональная_литература #проектирование_электроники

2023-11-22

Не спеши, Маша! Разбор примеров из книги Харрисон Д.М., Хариссон С.Л. Цифровая схемотехника и архитектура компьютера

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

habr.com/ru/articles/775718/

#параллельное_программирование #автоматное_программирование

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst