Параллелизм в Go тестах: все, что нужно знать о -p, -parallel и t.Parallel()

В Go есть три способа управления параллельностью тестов:
Короткий гайд о -p, -parallel и t.Parallel а также бонус для любителей параллельного программирования

Распараллеливаем вычисления

В Go есть три способа управления параллельностью тестов:
Короткий гайд о -p, -parallel и t.Parallel а также бонус для любителей параллельного программирования

Утечка горутин в Go происходит, когда горутина продолжает существовать и потреблять ресурсы, даже если она больше не выполняет полезной работы или не может завершиться. Это может произойти по разным причинам.
Мы рассмотрим 3 примера из которых: 2 будут на каналах, 1 с использованием mutex.

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

Как создать быстрый код на C++? Мы будем разбираться в современных техниках оптимизации: кэш-локальности, кастомных аллокаторах и многопоточности. Практические примеры и результаты тестов.

Привет, Хабр! Меня зовут Максим, я Go-разработчик из Wildberries. Свою дебютную статью я хочу посвятить довольно популярной теме, когда на проекте приходится уходить с одной технологии на другую. Данная статья будет полезна разработчикам, кто активно использует асинхронный способ передачи данных в своих проектах.

Платформа PHP часто подвергается критике за отсутствие встроенных возможностей для создания конкурентных приложений. В версии 8.1 был добавлен класс Fiber, который, согласно RFC, должен упростить создание конкурентных приложений. Однако, материалов, демонстрирующих использование данного функционала для построения приложений практически нет, напротив, говорится, что файберы - это функционал, предназначенный для использования разработчиками фреймворков и приводятся какие-то малоинформативные отрывки кода. В этой статье будет продемонстрирован концептуальный пример конкурентного приложения на PHP с использованием файберов.

В этой статье мы собираемся разобрать архитектуру Tensor Streaming Processor TSP и его компилятора, а затем увидим, как Groq построили надежный и высокопроизводительный распределенный механизм инференса искусственного интеллекта с использованием этих TSP.

Я являюсь автором проекта по математическому моделированию прикладной механики и в работе моей программы до 90% вычислительного времени уходит на решение системы линейных уравнений. Цель этой статьи сугубо практическая - найти оптимальный метод решения системы линейных уравнений с точки зрения производительность/трудозатрат для небольшого проекта и рассказать о результате.
В прошлом я уже несколько раз обращал внимание на вычисления на GPU, но всегда что-то останавливало. И вот у меня накопился достаточный практический опыт программирования на C/C++ и наконец дошли руки, чтобы протестировать OpenCL.

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


Мы используем Go для создания Dolt, первая в мире БД SQL с контролем версий. Как и большинство кодовых баз, основанных Go, мы используем каналы и горутины(от переводчика, автора этой статьи на Хабре: у меня есть хорошая статья на тему параллелизма в Go) для реализации параллелизма. Как правило мы используем эти конструкции очень скучным и обычным путем, ведь параллелизм и так сложен без всяких выдумок. Но в одном месте мы все-таки взяли маленький кусочек кода из другого open-source проекта, который использует каналы очень интересным способом...

Читаем предыдущую статью. Борьба за реализацию мечты продолжается.
Вячеслав ответил и все в мгновение ока стало ясно. Или, точнее, почти все.
А теперь подробнее...
Действительно, я дал в штангу - промазал с параметрами 2-го фазификатора. Не установил нужные значения. Мой косяк. Сбило то, что, во-первых, результаты совпадали (так уж получилось и теперь понятно почему) и, во-вторых, сравнивался код. В первую очередь на С++, как первый кандидат на ошибку. А он совпадал.
Сами же параметры скрыты - в свойствах блока и я как-то в суете забыл про них. Что тоже объяснимо (хотя и не оправдывает). Просто на С++ параметры в явном виде в тексте программы, а в SimInTech в неявном - настройках, а я фазификатор размножил копированием. Верхний работал и, вроде, верно, а потому какие могли быть вопросы к скопированному? Это я так думал. Действительно, к нему вопросов нет (пока), но были (есть?) ко мне. Но я уже покаялся...
Все это безобразие, невнимательность и далее по списку. Но это мой грех, про который я знаю, но преодолеть не в силах :( И потом я не какой-нибудь ChatGPT XXX, который не ошибается. Я же поднял "хайп", народ взбаламутил!? Гнать таких программистов! Заменить на ИИ!... И это уже происходит. И кто-то даже верит, что это поправит дело. Наивный...
Но давайте серьезно. Итак, я установил нужные параметры фазификатору, и результат не заставил себя ждать (см. рис. 1). Но, чтобы он устраивал, так тоже нет. Видна перерегулировка. Опять что-то не так с параметрами? Тьфу-тьфу. Я уже прямо боюсь... :) Но , вроде, с ними разобрались и не должно быть подвоха. Код? Проверено многократно. Глаз "замылился"? Может. Но, если честно, я его/их настолько "замылил", что смотреть на код уже сил просто нет... Тоже обычное дело ;)

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

Привет, Хабр!
Эта статья является неким сборником многих статей про все, что связано с параллелизмом в Go, например: горутины, каналы, select и многое другое.
Я хотел углубиться в тему горутин с параллелизмом и, слушая на фоне "The Doors", поглощал информацию и выделял интересные мысли из статей
Надеюсь, Вы найдете для себя то, что искали.

Вернемся к одному из проектов дистрибутива программной платформы SimInTeh, который был рассмотрен в двух статьях(см. [1, 2]). Он же под именем "Управление водонагревательным котлом" включен в раздел "Лабораторные работы по библиотекам" справочной системы SimInTech. Последнее должно предъявлять к нему повышенные требования, как к примеру, поясняющему, рекламирующему те или иные стороны и возможности программной платформы. Одним словом, он должен быть идеальным ...
Только недавно одна из найденных в нем ошибок была устранена. Но не это знаменательное событие было причиной вернуться к данной теме, а пришедшая примерно в это же время рассылка, рекламирующая возможности "новейшей российской инженерной платформы Engee". В числе прочих ее достоинств описывались включенные в платформу конечные автоматы (КА)[3], а в видео по ссылке прослеживалась явная любовь к светофорам. Но нагреватель в этом смысле ни чуть не хуже, а даже предпочтительнее.
Но "спусковым крючком" стал эмоциональный всплеск не самой положительной оценки данной конечным автоматам (подробнее см. [4]). Примечательно, что прозвучал он со стороны тех, кто ранее ввел этот инструментарий в свою платформу и, как можно предполагать, использует. Видимо, они лучше знают возможности своих автоматов? Но, если серьезно, то это, скорее всего, результат отмеченного "всплеска", который за истину воспринимать не стоит. Тем не менее, необходимо что-то уточнить, чтобы учесть и такое мнение о КА.
Итак, перед нами проект "Нагреватель" или "Управление водонагревательным котлом". Я не смог сразу найти проект в ВКПа к тем еще статьям, но, если честно, не сильно его и искал, т.к. решил, что проще создать новый. Хотелось проверить, что получится, если повторить в ВКПа автоматы, полностью аналогичные ранее созданным программным автоматам на внутреннем языке платформы SimInTech. А поскольку они были спроектированы согласно концепциям автоматного программирования, то препятствий не предполагалось. Но ... воистину - "не было этого никогда и вот опять".

* 21 и более параллельным запросом в определённых условиях :)
Привет, сегодня поговорим о подводных камнях использования виртуальных потоков в написанных на Java веб-приложениях. В статье описан случай из жизни, сперва поставивший в тупик, но оказавшийся не столь уж и запутанным, а причина и вовсе была известна и документирована.

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