Hacker News Digest

Тег: #multithreading

Постов: 4

Jemalloc 5.4.0 (github.com) 🔥 Горячее

Выпуск jemalloc 5.4.0 включает улучшения производительности и исправления ошибок. Добавлена поддержка новых архитектур, включая оптимизации для ARM64 и x86-64, что повышает эффективность распределения памяти в многопоточных средах. Улучшена масштабируемость при высокой нагрузке за счёт доработки внутренних кешей и уменьшения конкуренции за глобальные структуры. Исправлены проблемы с фрагментацией памяти в определённых сценариях аллокации и dealлокации мелких объектов. Обновлён интерфейс для лучшей интеграции с инструментами профилирования и отладки, включая расширенную поддержку статистики через mallctl. Добавлены новые флаги конфигурации для тонкой настройки поведения аллокатора под конкретные рабочие нагрузки. Исправлены утечки ресурсов в редких условиях ошибок инициализации. Релиз совместим с предыдущими версиями по ABI, обеспечивая плавное обновление без пересборки зависимых проектов. Изменения направлены на повышение надёжности и эффективности jemalloc в продакшн-средах, особенно в системах с высокой конкуренцией за память.

by gkfasdfasdf • 18 сентября 2026 г. в 04:20 • 333 points

Оригинал • HN

#arm64#github#jemalloc#mallctl#memory-allocation#memory-fragmentation#multithreading#performance#profiling#x86-64

Комментарии (94)

Выпуск jemalloc 5.4.0 восстанавливает активность проекта после многолетнего застоя (с 2022 года), что критично для пользователей, зависящих от его стабильности и производительности в продакшене, особенно в Ruby on Rails и многопоточных системах. Jemalloc значительно снижает потребление памяти в Ruby on Rails приложениях: один пользователь зафиксировал падение с 8 ГБ до менее чем 1 ГБ при использовании Sidekiq. Он позволяет отслеживать потребление памяти по потокам и ограничивать нагрузку по бюджету памяти, что полезно для CPU-ограниченных приложений с привязкой потоков к ядрам. Jemalloc эффективнее tcmalloc и mimalloc в сценариях, требующих перпотокового учёта памяти, так как другие аллокаторы не предоставляют аналогичной функциональности. Несмотря на уход Jason Evans, jemalloc продолжает развиваться, и его название (JE — Jason Evans) остаётся историческим наследием, хотя в документации не упоминается явно. Совет: Для приложений на Ruby on Rails в Kubernetes использование jemalloc рекомендовано для снижения потребления памяти и улучшения стабильности. Переход tcmalloc с кешей потоков на кешы CPU обусловлен нестабильностью привязки потоков к ядрам в Linux — потоки могут перемещаться, делая перпотоковые кешы неэффективными. Спор: Некоторые пользователи считают попадание jemalloc 5.4.0 на главную страницу HN необоснованным, другие — оправданным из-за важности проекта для продакшена. Корпоративное участие (например, Meta) в развитии jemalloc не гарантирует долгосрочной поддержки, что подтверждается постмортемом и прекращением активности в прошлом. Фрагментация памяти и масштабируемость в многопоточных средах были ключевыми проблемами, решёнными в jemalloc 5.4.0, что делает релиз значимым для высоконагруженных систем. История jemalloc — пример того, как открытый проект, поддерживаемый крупной компанией, может потерять импульс, и его возрождение — редкое и ценное событие для сообщества. Несмотря на юмористические шутки о происхождении названия («Je m'alloc»), реальное имя происходит от Jason Evans, и это общепринятая традиция в мире malloc-аллокаторов (dlmalloc, phkmalloc).

A comparison of Ada and Rust, using solutions to the Advent of Code (github.com) 🔥 Горячее 💬 Длинная дискуссия

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

Приводятся конкретные примеры кода на разных языках программирования, демонстрирующие оптимизации и trade-offs. Упоминаются ключевые инсайты, такие как важность выбора правильных структур данных для сокращения сложности алгоритмов. Это полезно для разработчиков, стремящихся улучшить свои навыки решения алгоритмических задач.

by andsoitis • 04 октября 2025 г. в 15:10 • 281 points

Оригинал • HN

#ada#advent-of-code#algorithms#compiler#data-structures#memory-safety#multithreading#rust#safety-critical#utf-8

Комментарии (196)

  • Участники отмечают сильные стороны Ada, такие как ограниченные числовые типы для предотвращения ошибок, выразительная система типов и удобочитаемость, но сожалеют о его недостаточном распространении вне сообщества safety-critical разработки.
  • Rust ценится за безопасность памяти, фокус на надежности и растущую экосистему, но критикуется за отсутствие формальной спецификации (хотя она сейчас разрабатывается) и сложность с компилятором и асинхронностью.
  • Поднимаются вопросы о различиях в подходах к строкам (Ada использует массивы символов, Rust — UTF-8), многопоточности (встроенные потоки vs. async) и индексации массивов (произвольные типы в Ada vs. словари в Rust).
  • Обсуждаются практические аспекты: скорость компиляции, поддержка Unicode, необходимость спецификаций и влияние экосистемы (инструменты, библиотеки) на выбор языка.
  • Упоминаются нишевые применения Ada (например, в 3D-печати) и потенциальные заимствования его функций (ограниченные типы) в другие языки, такие как Rust, C++ и Nim.

Testing is better than data structures and algorithms (nedbatchelder.com)

Новички в программировании часто зацикливаются на изучении структур данных и алгоритмов (DSA), потому что это проверяется на собеседованиях. Однако в реальной работе редко приходится реализовывать сложные алгоритмы вручную — вместо этого стоит понять базовые структуры, их trade-offs и основы Big O, чтобы эффективно организовывать и обрабатывать данные.

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

by rsyring • 22 сентября 2025 г. в 16:21 • 151 points

Оригинал • HN

#algorithms#big-o#data-structures#multithreading#performance#property-based-testing#testing

Комментарии (143)

  • Участники обсуждают важность знания структур данных и алгоритмов (DSA) для разработчиков, отмечая, что понимание их характеристик (например, сложности операций) часто важнее умения реализовывать их с нуля.
  • Подчеркивается необходимость баланса между теоретическими знаниями (DSA) и практическими навыками тестирования, при этом многие отмечают, что эти навыки не исключают, а дополняют друг друга.
  • В дискуссии звучит критика статьи, указанной в исходном посте, за её провокационный заголовок, который, по мнению участников, упрощает сложную проблему и создает ложную дихотомию между DSA и тестированием.
  • Несколько комментаторов приводят примеры из практики, где незнание базовых принципов DSA (например, сложности алгоритмов) приводило к серьезным проблемам с производительностью в продакшене.
  • Обсуждается роль тестирования: одни видят в нем ключевой навык для обеспечения качества, другие указывают на его ограничения (например, сложность тестирования многопоточных систем) и необходимость сочетать его с другими методами, как property-based тестирование или формальные доказательства.

Without the futex, it's futile (h4x0r.org) 🔥 Горячее

Без futex всё тленно

Книга The Art of Multiprocessor Programming (2-е изд., 2021) считается канонической, но она обходит стороной futex — ключевой примитив современной многопоточности. Это упущение делает пособие бесполезным для практиков.

Futex ≠ mutex
Название происходит от «fast userspace mutex», но futex — это не мьютекс, а основа для всех высокоэффективных примитивов синхронизации. До него всё строилось на громоздких System V IPC, которые не масштабировались: при 1000 потоков futex в 2002-м оказался в 20–120 раз быстрее sysv-блокировок. Windows и macOS добавили аналоги только в 2012 и 2016 гг.

Суть futex
Он разделяет блокировку и ожидание/пробуждение:

  • В user-space проверяем состояние; если свободно — захватываем без системного вызова.
  • При конфликте вызываем futex_wait(addr, expected), засыпаем в ядре на конкретном адресе.
  • Пробуждение — futex_wake(addr, n), где n обычно 1 или «все».

Передаваемое в wait значение защищает от «просыпания» после уже случившегося события: если память изменилась, системный вызов мгновенно возвращает ошибку.

Такой подход убирает лишние системные вызовы и позволяет строить быстрые мьютексы, rw-lock’и, семафоры и пр. без поллинга и экспоненциальных бэкоффов.

Итог
Любая современная библиотека (pthreads, C++ std::mutex, Rust std::sync) опирается на futex. Учебник, игнорирующий этот примитив, не готовит к реальной разработке.

by eatonphil • 19 августа 2025 г. в 13:53 • 284 points

Оригинал • HN

#c++#futex#io-uring#linux#multithreading#numa#pthreads#rust#synchronization#system-v

Комментарии (138)

  • Futex — это быстрый примитив синхронизации, который экономит системные вызовы при отсутствии конфликтов и не требует выделения ядром объектов.
  • В отличие от Benaphore и старых SysV-механизмов, futex не требует предварительной инициализации в ядре и исчезает, когда нет ожидающих.
  • Обсуждение подчёркивает, что современные учебники по многопроцессорному программированию обязаны упоминать futex, но «The Art of Multiprocessor Programming» этому не уделяет внимания.
  • Улучшения futex2 (Linux ≥5.16) добавили NUMA-поддержку и аналог Windows WaitForMultipleObjects, а io_uring теперь умеет работать с futex.
  • Для надёжности при падении потока существуют robust-locks и списки futex, которые ядро автоматически разблокирует.