Hacker News Digest

Тег: #profiling

Постов: 3

Python 3.15 (python.org) 🔥 Горячее

Python 3.15.0 вышел с рядом значительных улучшений: введены новые встроенные типы — sentinel и frozendict, а также по умолчанию включена UTF-8 как кодировка. Добавлена поддержка распаковки в генераторах, ленивые импорты для ускорения запуска и улучшены сообщения об ошибках. Экспериментальный JIT-компилятор показал прирост производительности до 12% на AArch64 macOS и 8% на x86-64 Linux. В стандартной библиотеке появился новый профилировщик Tachyon и отдельный пакет для инструментов профилирования. В типизации добавлены TypedDict с типизированными дополнительными полями, TypeForm для аннотаций и поддержка непересекающихся базовых типов. C-API получил новые функции, включая PyBytesWriter и защиту от некорректной финализации. На Windows теперь используется tail-calling интерпретатор, а на macOS по умолчанию включена free-threading поддержка. По умолчанию включены frame pointers для лучшей наблюдаемости на уровне системы.

by ngoldbaum • 09 октября 2026 г. в 14:35 • 311 points

Оригинал • HN

#aarch64#free-threading#jit#linux#macos#profiling#python#tail-calling#typing

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

Обсуждение подтверждает практическую значимость новых фич Python 3.15: стабильный ABI для free-threaded сборок сокращает CI-матрицы в 5 раз, ленивые импорты востребованы для ускорения старта, а frozendict и распаковка в компрехеншенах — долгожданные улучшения качества жизни, несмотря на медленное внедрение в дистрибутивах.

  • Поддержка abi3t позволяет выпускать одну универсальную .whl-сборку для free-threaded и GIL-версий, сократив CI-матрицу с 20 до 4 джобов по опыту @hncbw02z5a.

  • Ленивые импорты (PEP 810) востребованы сообществом как долгожданное улучшение для ускорения старта интерпретатора, подтверждено несколькими участниками, включая @kbumsik и @fishgoesblub.

  • frozendict и распаковка в компрехеншенах (PEP 798, PEP 814) считаются долгожданными качественными улучшениями, несмотря на то, что их отсутствие было необъяснимым с 3.6 (@6gvONxR4sf7o, @tipsytoad).

  • UTF-8 по умолчанию воспринимается как очевидное улучшение, но удивление участников (@hleszek) показывает, что многие не осознавали, что это ещё не было стандартом.

  • Tachyon-профайлер полезен для продакшена, так как позволяет профилировать запущенные процессы без перезапуска (@febed).

  • Стабильный ABI (abi3t) обеспечивает совместимость сборок на несколько версий Python вперёд, что снижает нагрузку на поддержку библиотек (@yablak, @ngoldbaum).

  • Спор: Утверждение @wg0 о переходе Python-интерпретатора на Rust как основного языка опровергается @zahlman и @fastily: текущие шаги — лишь интеграция отдельных компонентов на Rust, а не замена CPython.

  • Спор: Некоторые участники (@simonw, @ryandrake) критикуют политику быстрого отказа от старых версий Python, указывая, что пользователи всё ещё зависят от 3.10 и ниже, и ломать совместимость — неоправданный риск.

  • Совет: Для поддержки старых систем (например, EL7) компании продолжают поддерживать Python 3.5, несмотря на EOL, что подтверждает @elevation — отсутствие поддержки ≠ отсутствие использования.

  • Совет: Использование uvx --python 3.15 whatsnewt может привести к запуску альфа-версии (3.15.0a2), где некоторые фичи ещё не реализованы, как предупреждает @ameliaquining.

  • Размер исходного архива Python 3.15 вырос из-за двух анимированных GIF-демонстраций Tachyon-профайлера весом >10 МБ, что вызвало критику @zahlman как неэффективное использование места.

  • Совет: Для enterprise-дистрибутивов (RHEL, Ubuntu) срок поддержки Python превышает 10 лет, что делает реальное использование версий 3.8–3.14 долгосрочным, несмотря на официальный EOL (@zzzoom).

Go Concurrency Distilled (antonz.org) 🔥 Горячее 💬 Длинная дискуссия

Go предоставляет лёгкие горутины, запускаемые ключевым словом go, которые планируются рантаймом на системные потоки. Для синхронизации используются sync.WaitGroup, увеличивающий счётчик при Add и уменьшающий при Done, а Wait блокирует до нуля. Каналы обеспечивают синхронный обмен данными: отправка блокирует до получения, а select позволяет ждать нескольких каналов одновременно, включая time.After для таймаутов. Контекст (context.Context) передаёт сигналы отмены и таймауты через WithCancel и WithTimeout, проверяемые через Done(). Для защиты共享 данных применяются мьютексы (sync.Mutex), а атомарные операции (sync/atomic) работают без блокировок. Семафоры ограничивают доступ к ресурсам через буферизованные каналы, а sync.Once гарантирует однократную инициализацию. Профилирование выполняется через net/http/pprof или вручную: pprof.StartCPUProfile для CPU, runtime.MemStats для памяти, trace.Start для трассировки, включая flight recording с ограничением по размеру и времени. Все инструменты направлены на безопасную и эффективную конкурентность без гонок данных.

by chmaynard • 26 сентября 2026 г. в 14:34 • 382 points

Оригинал • HN

#atomic#channel#concurrency#context#go#mutex#pprof#profiling#runtime#sync

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

Go-конкурентность проста для старта, но сложна для безопасной эксплуатации в проде: утечки горутин, отсутствие встроенной отмены и трудности с отладкой — частые проблемы. Опытные разработчики обходят их через context, WaitGroup и избегают каналов там, где они не нужны. Не используйте каналы повсеместно — многие профессионалы Go редко применяют их, предпочитая последовательный код и вводя конкуренцию только при превышении SLO. Перед запуском горутины обязательно определите, как она будет остановлена — утечки горутин в проде трудно отлаживать и требуют перезапуска процесса. Используйте context для отмены, но помните: отмена требует сотрудничества горутины — Go не поддерживает прерывание, так как не имеет исключений. Простые шаблоны go+chan из учебников часто небезопасны — реальные приложения требуют хаков для управления жизненным циклом горутин. Избегайте сложных графов операций в Go — без generics и completable futures это сложно; альтернативы вроде goyek помогают, но не решают фундаментальные ограничения. Go-каналы не эквивалентны Haskell's STM — отсутствие транзакционной памяти снижает абстрактную мощность, а поведение при закрытии канала дважды — произвольное и непредсказуемое. Java с виртуальными потоками и структурированной конкурентностью предлагает более надёжный и безопасный подход, чем Go, особенно с учётом отсутствия memory safety в Go. Erlang/BEAM и Elixir имеют более зрелую модель акторов с распределённой обработкой, устойчивостью к сбоям и поддержкой межмашинной коммуникации, чего Go не имеет. Kotlin coroutines и структурированная конкурентность решают проблему отмены и управления жизненным циклом более элегантно, чем Go-контекст. Haskell позволяет писать асинхронный код как синхронный — без прыжков между сообщениями, что делает логику проще для понимания, чем в Go-каналах. Julia предлагает более продвинутую систему потоков: M:N, структурированная конкурентность, распределённые вычисления и безопасные атомарные операции в стандартной библиотеке. Опытные разработчики Go часто избегают mutex и каналов в PR — любое использование этих механизмов воспринимается как признак ошибки. Для сложных задач с очередями и диспетчеризацией лучше выносить конкурентность в отдельные менеджеры — логика остаётся линейной, что упрощает аудит и отладку. Go-конкурентность — это магия для старта, но требует глубокого понимания для продакшена: утечки, отмена и отладка — главные боли, которые не решаются синтаксисом. Каналы в Go — это просто буферизованные очереди; небуферизованные каналы создают rendezvous-синхронизацию, что отличает их от mvar и требует осознанного применения.

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).