️ Эта статья берет за основу Go 1.14.Go предоставляет механизмы синхронизации памяти, такие как канал (channel) или мьютекс (mutex ), которые помогают решать различные проблемы. Касательно разделяемой памяти, мьютекс защищает память от гонки данных. Однако, несмотря на существование двух типов мьютексов, в целях повышения производительности Go также предоставляет атомарные примитивы памяти в пакете atomic. Но давайте сначала вернемся к гонкам данных, прежде чем углубляться в решения. Читать далее
Я часто слышу от пробующих работать с Rust системных программистов жалобы на мьютексы и особенно на Rust Mutex API. Жалобы обычно выглядят так: Они не хотят, чтобы мьютекс содержал данные, только блокировку. Они не хотят управлять «защитным» значением, разблокирующим мьютекс при сбросе,
Фото: James P. Blair/National Geographic Creative Вы когда-нибудь сталкивались со следующей проблемой в rust, когда использовали std::sync::Mutex в асинхронном коде? 7 | tokio::spawn(/* some future here */); | ^^^^^^^^^^^^ future returned by `fut` is not `Send` | 127 | T: Future + Send + 'static, | ---- required by this bound in `tokio::task::spawn::spawn` | Читать дальше →
Профилирование приложений — это процесс анализа программы для определения её характеристик: времени выполнения различных частей кода и использования ресурсов.Для асинхронного python-кода существует конечное количество специфических "узких мест", которые лучше перечислить заранее. Читать далее