
sizeof(Mutex<()>) упал с 40 байт до 5: что внутри std::sync::Mutex после Rust 1.62
sizeof(Mutex<()>) в Rust 1.61 на Linux был 40 байт. В Rust 1.62 он стал 5 (точнее, 8 с учётом выравнивания, но базовый overhead 5). За уменьшением размера в восемь раз стоит полная переписка стандартного Mutex с...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: sizeof(Mutex<()>) в Rust 1. 61 на Linux был 40 байт.
62 он стал 5 (точнее, 8 с учётом выравнивания, но базовый overhead 5). За уменьшением размера в восемь раз стоит полная переписка стандартного Mutex с pthread на futex напрямую, ускорение uncontended locks в 2-3 раза, и десятилетие, которое стандартный Mutex провёл в роли «возьми parking_lot, std::sync::Mutex медленный».
Технические детали
Сегодня заглянем под капот всей этой темы, разберём, что лежит внутри std::sync::Mutex после 1. 62, какой алгоритм там используется, почему он на самом деле быстрее pthread, как устроен fairness (точнее, его отсутствие), зачем нужен poisoning, и в каких случаях parking_lot всё ещё имеет смысл тащить в зависимости.
Заодно вернёмся к моей старой async-статье и поясним конкретнее, почему в async-задачах std::sync::Mutex это проблема, и при чём тут вообще futex.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





