Конкурентность сложно как следует наладить, как минимум, тем из нас, кому не повезло писать на языках, непосредственно открывающих нутро конкурентного аппаратного обеспечения: речь о потоках и разделяемой памяти. Не менее сложно организовать конкурентность так, чтобы она работала и правильно, и быстро. Все, что вы знаете об оптимизации однопоточного кода, зачастую вам не поможет. На микроуровне (отдельные инструкции) просто невозможно применить обычные правила, актуальные для μ-операций, цепочек зависимостей, пределов пропускной способности и т.д. При конкурентности правила другие.
Рубрика «системное программирование» - 4
Во что вам обойдется конкурентная обработка. Иерархия проблем
2022-06-13 в 4:48, admin, рубрики: c++, cpu, Алгоритмы, блокировки, высокая производительность, исследование, многопоточность, Параллелизм, параллельное программирование, системное программирование16-битная ОС на fasm + Cи. Часть 1
2022-06-01 в 2:42, admin, рубрики: C, ассемблер, загрузка ос, загрузчик, операционная система, Си, системное программированиеДанная статья в большей степени является не руководством и не мануалом, а просто моими заметками. Идея этой статьи собрать множество особенностей и знаний в одно целое, надеюсь, она кому-то пригодится =)
Что происходит с ОЗУ при загрузке компьютера
Когда вы нажимаете кнопку старта на компьютере(или замыкаете контакты на материнке) BIOS проверяет оборудование и загружает первый сектор жесткого диска(512 байт), который помечен как загрузочный, по адресу 7C00h (h - hex) и начинает выполнять программу которая лежит в этих 512 байтах. От сюда следует, что у нас в распоряжеии есть только 512 байт.
Embox открытая ОС на Эльбрусе
2022-05-12 в 13:26, admin, рубрики: E2K, embox, open source, процессор эльбрус, Процессоры, системное программированиеКонечно многие знают о том какие Эльбрусы закрытые. Это является наверное самой главной претензией предъявляемой к данным процессорам. Эти претензии не безосновательны, в МЦСТ их признают. Но как говорится нельзя “просто так взять и открыть исходники для Эльбруса”, ведь большинство работ велось для определенного заказчика и их разглашение — нарушение договора. С другой стороны МЦСТ понимают проблему закрытости и стараются изменить ситуацию Мы в проекте Embox тоже пытаемся этому способствовать по мере сил. О наших успехах в данном направлении вы можете узнать из этой статьи.
Читать полностью »
Баг в ядре Linux и как правильно жаловаться
2022-03-26 в 19:10, admin, рубрики: C, deadlock, linux, open source, библиотека, блокировки, взаимные блокировки, многопоточность, параллельное программирование, системное программирование, ядроЯ работаю системным программистом в компании КриптоПро. Нередко мои задачи связаны с ошибками, которые лежат на самом нижнем уровне современных операционных систем, под которые мы пишем ПО. Я хочу поведать тебе, Хабр, об одной из таких ошибок и о том, как я жаловался на неё разработчикам.
История: пишем скрипты на Go
2022-03-21 в 8:08, admin, рубрики: Go, Блог компании Издательский дом «Питер», командная строка, оболочка, оптимизация, Программирование, Разработка под Linux, системное программирование, скриптыЭто история о том, как я попытался писать скрипты на языке Go. Здесь мы обсудим, когда вам может понадобиться скрипт на Go, какого поведения от него следует ожидать, а также рассмотрим его возможные реализации. В этой дискуссии мы глубоко обсудим скрипты, оболочку и шебанг-строки . Наконец, обсудим решения, обеспечивающие работоспособность скриптов на Go.
Почему Go хорош для скриптинга?
Умный malloc для С
2022-03-08 в 18:27, admin, рубрики: C, new, выделение памяти, Программирование, реализация, Си, системное программированиеНа днях я экспериментировал с языком С, и придумал одну интересную концепцию для удобства выделения памяти ( точнее перенял идею С++ но реализовал её средствами языка С ). Я про операторы new и delete, которые захотел повторить. В этой статье я расскажу о новом malloc, как я к этому пришёл, зачем это нужно, и как оно работает.
Зачем?
В С ( по моему личному мнению ) немного неудобно организована работа с памятью - где-то идёт работа с байтами, а где-то с ячейками. Простой пример:
*u++ = 1;
Rust 1.59.0: встроенный ассемблер, деструктурирующее присваивание, отключение инкрементальной компиляции
2022-02-26 в 12:01, admin, рубрики: cargo, clippy, open source, release, Rust, rustc, rustdoc, rustfix, rustfmt, stable, Компиляторы, Программирование, системное программирование, стабильная версия, языки программированияКоманда Rust публикует новую версию языка — 1.59.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Сегодняшний релиз выпал на день, когда внимание мира приковано к внезапному нападению сил Путина на Украину. До того, как погрузиться в детали нового релиза Rust, мы хотим заявить, что мы солидарны с народом Украины и выражаем нашу поддержку всем людям, затронутым этим конфликтом.
Если у вас есть предыдущая версия Rust, установленная через rustup
, то для обновления до версии 1.59.0 вам достаточно выполнить команду:
rustup update stable
...или о fork() в двух словах.
Как люди решают задачи
Обычно у каждой задачи есть одно простое решение, которое воспринимается всеми как правильное. Люди воспринимают такое решение правильным либо исходя из личного опыта¹; исходя из опыта других людей² или просто не задумываясь о правильности³. И самое удивительное, что мир не взорвался, никто (массово) от этого не умер, код работает и приносит деньги.
¹ "всегда так пишу код, никто не умер"
² "копирую код из stack overflow который набрал больше всех плюсов"
³ "копирую первый попавшийся код из stack overflow"
Анализируем bound checks в Go по CPU профилю
2022-02-13 в 10:42, admin, рубрики: amd64, asm, cpuprofile, Go, golang, performance, pprof, profiling, static analysis, высокая производительность, Компиляторы, системное программированиеСегодня мы будем анализировать бинарники на пару с CPU профилями, чтобы создать на их основе расширенные профили исполнения. Эти дополненные профили мы сможем использовать для оценки времени, которое программа тратит на проверки выхода за границу массивов и слайсов.
Флаг EPOLLEXCLUSIVE и проблема неравномерного распределения соединений в Nginx на Linux
2022-02-06 в 7:06, admin, рубрики: C, epoll, nginx, балансировка, Разработка под Linux, Серверное администрирование, системное программированиеВведение
Совсем недавно, 25 января 2022 года вышел новый релиз Nginx - 1.21.6, в котором исправлена проблема неравномерного распределения входящих соединений между несколькими worker процессами в дефолтной конфигурации на Linux системах. Если конкретнее - use epoll, accept_mutex off, reuseport выключен.
В данной конфигурации при определенном характере нагрузки большинство входящих в Nginx соединений обрабатывается лишь одним worker процессом.