ECMAScript | Кластеры Агентов

Кластер агентов (agent cluster) — это максимальный набор агентов, которые могут взаимодействовать, работая с общей памятью.

Примечание 1

Программы в разных агентах могут совместно использовать память неуказанными способами. Как минимум, резервная память для объектов SharedArrayBuffer может совместно использоваться агентами в кластере.

Могут быть агенты, которые могут общаться посредством передачи сообщений, но не могут совместно использовать память; они никогда не находятся в одном кластере агентов.

Каждый агент принадлежит ровно к одному кластеру агентов.

Примечание 2

Необязательно, чтобы все агенты в кластере были живы в какой-то конкретный момент времени. Если агент A создает другого агента B, после чего A завершает работу и B создает агент C, три агента находятся в одном кластере, если A может совместно использовать некоторую память с B, а B может совместно использовать некоторую память с C.

Все агенты в кластере должны иметь одинаковое значение для свойства [[LittleEndian]] в соответствующих Записях Агента.

Примечание 3

Если разные агенты в кластере агентов имеют разные значения [[LittleEndian]], становится трудно использовать разделяемую память для многобайтовых данных.

Все агенты в кластере должны иметь одинаковые значения для свойства [[IsLockFree1]] в своих соответствующих Записях Агента; аналогично для свойства [[IsLockFree2]].

Все агенты в кластере должны иметь разные значения для свойства [[Signifier]] в соответствующих Записях Агента.

Встраивание может деактивировать (остановить продвижение вперед) или активировать (возобновить продвижение вперед) агента без ведома или сотрудничества агента. Если встраивание делает это, оно не должно оставлять некоторые агенты в кластере активными, в то время как другие агенты в кластере деактивируются на неопределенный срок.

Примечание 4

Цель предыдущего ограничения — избежать ситуации, когда агент заходит в тупик или умирает от голода из-за того, что другой агент был деактивирован. Например, если совместно используемому работнику HTML, время жизни которого не зависит от документов в каких-либо окнах, было разрешено совместно использовать память с выделенным исполнителем такого независимого документа, и этот документ и его выделенный рабочий процесс должны были быть деактивированы, пока выделенный рабочий держит блокировку (скажем, документ помещается в историю своего окна), а затем общий рабочий процесс пытается получить блокировку, тогда общий рабочий будет заблокирован до тех пор, пока выделенный рабочий не будет активирован снова, если это вообще произойдет. Тем временем другие рабочие, пытающиеся получить доступ к общему рабочему из других окон, будут голодать.

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

Примечание 5

Примерами такого типа завершения являются: операционные системы или пользователи, завершающие агенты, которые работают в отдельных процессах; само встраивание завершает агент, который работает внутри процесса с другими агентами, когда учет ресурсов для каждого агента указывает на то, что агент сбежал.

Перед любой оценкой любого кода ECMAScript любым агентом в кластере в поле [[CandidateExecution]] Записи Агента для всех агентов в кластере устанавливается начальный кандидат на выполнение (candidate execution). Первоначальным кандидатом на выполнение является пустой кандидат на выполнение, поле [[EventsRecords]] которого представляет собой Список, содержащий для каждого агента Запись Событий Агента, поле [[AgentSignifier]] которой является означающим этого агента, а [[EventList]] и [[AgentSynchronizesWith]] — это пустые Списки.

Примечание 6

Все агенты в кластере агентов используют один и тот же кандидат на выполнение в поле Записи Агента [[Candidate Execution]]. Кандидат на выполнение (candidate execution) — это механизм спецификации, используемый моделью памяти.

Примечание 7

Кластер агентов (agent cluster) — это механизм спецификации, который не обязательно должен соответствовать какому-либо конкретному артефакту реализации ECMAScript.

Информационные ссылки

Предыдущая тема — ECMAScript | Агенты

Стандарт ECMAScript — Раздел «9.7 Agent Clusters» — https://tc39.es/ecma262/#sec-agent-clusters

Поделись записью