Чтобы агент продвинулся вперед (make forward progress), он должен выполнить этап оценки в соответствии с этой спецификацией.
Агент блокируется (blocked), когда его работающий (текущий) контекст выполнения синхронно и неопределенно долго ожидает внешнего события. В этом смысле могут быть заблокированы только агенты, у которых свойство [[CanBlock]] записи агента равно true. Незаблокированный (unblocked) агент — это агент, который не заблокирован.
Реализации должны гарантировать, что:
- каждый разблокированный агент с выделенным потоком выполнения в конечном итоге продвигается вперед
- в наборе агентов, которые совместно используют поток выполнения, один агент в конечном итоге продвигается вперед
- агент не вызывает блокировку другого агента, за исключением явных API-интерфейсов, обеспечивающих блокировку.
Это, наряду с гарантией живучести в модели памяти, гарантирует, что все записи SeqCst в конечном итоге станут наблюдаемыми для всех агентов.
Информационные ссылки
Предыдущая тема — ECMAScript | Кластеры Агентов
Стандарт ECMAScript — Раздел «9.8 Forward Progress» — https://tc39.es/ecma262/#sec-forward-progress