Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет информацию про Atomics #5359

Merged
merged 7 commits into from
Jul 9, 2024

Conversation

vsezol
Copy link
Contributor

@vsezol vsezol commented Jun 1, 2024

Описание

Добавлена информация о возможностях Atomics и реализации Mutex с их помощью.

Closes #4798

@vsezol vsezol requested a review from HellSquirrel as a code owner June 1, 2024 15:16
@github-actions github-actions bot added js Контент по JavaScript дока Справочный материал labels Jun 1, 2024
js/atomics/index.md Outdated Show resolved Hide resolved
@alaev-dev
Copy link

Статья отличная. Однако стоит упомянуть, что в JavaScript отсутствуют встроенные механизмы read-write lock. Тем не менее, их можно реализовать самостоятельно, что даёт значительный прирост производительности. Эта информация будет полезна для читателей.

@vsezol
Copy link
Contributor Author

vsezol commented Jun 1, 2024

Статья отличная. Однако стоит упомянуть, что в JavaScript отсутствуют встроенные механизмы read-write lock. Тем не менее, их можно реализовать самостоятельно, что даёт значительный прирост производительности. Эта информация будет полезна для читателей.

В файле упомянуто, что в JS есть Atomics, благодаря которым можно реализовать эти примитивы. Прирост в производительности в этом случае не гарантирован, речь идет про Atomics-ы, а не про механизмы оптимизации производительности в многопоточном программировании.

js/atomics/index.md Outdated Show resolved Hide resolved
js/atomics/index.md Outdated Show resolved Hide resolved
@HellSquirrel
Copy link
Member

Приветик, чуть попозже набегу почитаю-поправлю. Спасибо большое за статью

@TatianaFokina
Copy link
Member

TatianaFokina commented Jun 17, 2024

робко пингует @HellSquirrel

Copy link
Member

@HellSquirrel HellSquirrel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Очень круто! Добавила несколько комментариев.
Извини что долго шла до твоего PR

## Пример
Потребность в использовании атомарных операций возникает при работе с `SharedArrayBuffer`, благодаря которому появляется возможность разделения общей памяти между потоками. При работе с общей памятью есть риск возникновения состояния гонки (race condition) без контроля доступа к общему состоянию.

При правильном использовании `Atomics` мы можем гарантировать, что изменения записываются и читаются, а операции не прерываются и завершаются до начала следующей.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут хочется пруф. Из моих смутных воспоминаний про конкаренси алгоритмы следует что не всех гонок и дедлоков можно избегать. Альтенативно можно использовать более аккуратную формулировку "атомики позволяют избегать дедлоков и гонок"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

готово

js/atomics/index.md Show resolved Hide resolved
}
```

Вывод в консоль может выглядеть как в примере ниже, но каждый раз он будет случайным. Это зависит от ресурсов компьютера и текущей нагрузки на него.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не уверена что тут дело в нагрузке, скорее в том как звезды сложатся и в ток как системный планировщик все порулит... или атомики планирует браузерный планировщик?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Голосую за системный (вроде в хроме поток это прям системный поток)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

немного переписал


### Разрешение состояния гонки

При разрешении состояния гонки мы можем использовать `Mutex`. `Mutex` обеспечивает механизм критических секций. Критическая секция — это часть кода между вызовами блокировки и разблокировки состояния. Проще говоря, `Mutex` позволяет только одному потоку в единый момент времени владеть общим состоянием.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давай уточним что это за состояние состояние?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Уточнил, что это SharedArrayBuffer в контексте JS

Если кратко, то:

- У `Mutex` есть два состояния «заблокирован» и «разблокирован».
- Пока `Mutex` заблокирован, остальные потоки ожидают получения права на блокировку.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давай уточним что блокирует мьютекс

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавил

Copy link

github-actions bot commented Jul 5, 2024

Превью контента из 7ed8622 опубликовано.

Copy link
Member

@HellSquirrel HellSquirrel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Супер, спасибо!

@HellSquirrel HellSquirrel merged commit 0e2996d into doka-guide:main Jul 9, 2024
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js Контент по JavaScript дока Справочный материал
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Расширяем материалы о многопоточности в JavaScript: Atomics
6 participants