We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
内存一致性模型,也叫 内存模型,指定通过访问由 SharedArrayBuffer 支持的 TypedArray 实例以及通过 Atomics 对象上的方法产生的 Shared Data Block 事件的可能顺序。当程序没有数据争用,事件的顺序显示为顺序一致,即每个 代理 的动作交错。当程序存在数据争用,共享内存操作可能会出现顺序不一致。例如,程序可能会表现出违反因果关系的行为和其他怪异的地方。这些怪异来自编译器转换和CPU的设计(例如乱序执行和推测)。内存模型既定义了程序表现出顺序一致行为的精确条件,也定义了从数据竞争中读取的可能值。也就是说,没有不确定的行为。
SharedArrayBuffer
TypedArray
Atomics
内存模型被定义为对求值过程中 SharedArrayBuffer 上的 抽象操作 或 Atomics 对象上的方法所引入的事件的关系约束。
本节提供了针对 SharedArrayBuffers 上的抽象操作所引入的事件的公理(不言自明的)模型。 需要强调的是,与规范的其余部分不同,该模型无法通过算法表达。抽象操作对事件的不确定性引入是ECMAScript求值的操作语义与内存模型的公理语义之间的接口。这些事件的语义是通过考虑求值中所有事件的图来定义的。 这些既不是静态语义也不是运行时语义。没有经过证明的算法实现,而是一组约束,这些约束确定了允许还是不允许特定事件图。
SharedArrayBuffers
共享内存访问(读取和写入)分为以下两组,原子访问和数据访问。原子访问是顺序一致的,即,代理群集 中所有代理都同意对事件进行严格的总排序。非原子访问没有所有代理都同意的严格总排序,即未排序。
不支持弱于顺序一致且强于无序的排序,例如发布获取。
Shared Data Block event 是 ReadSharedMemory,WriteSharedMemory, ReadModifyWriteSharedMemory 记录 其中之一。
这些事件通过 抽象操作 或原子对象上的方法引入的。
一些操作可能还会引入 Synchronize 事件。Synchronize event 没有字段,存在纯粹是为了直接限制其他事件的允许顺序。
除了 Shared Data Block 和 Synchronize event,还有环境特定事件。
假设 ReadSharedMemory,WriteSharedMemory 或 ReadModifyWriteSharedMemory 事件的范围是从 [[ByteIndex]] 到 [[ByteIndex]] + [[ElementSize]] - 1 的连续整数的集合。当两个事件具有相同的 [[Block]] 并且元素范围相等时,这两个事件的范围相等。当事件具有相同的 [[Block]] 并且它们的范围不相等,同时它们的交集非空,那么这两个事件的范围重叠。当事件具有不同的 [[Block]] 并且它们的范围即不相等也不相交,则这两个事件不相交。
对于候选执行 execution,execution.[[AgentOrder]] 是满足以下条件的最小事件关系:
对于候选执行 execution,execution.[[ReadsBytesFrom]] 是数学函数,可将 SharedDataBlockEventSet(execution) 中的事件映射到满足以下条件的 SharedDataBlockEventSet(execution) 中的事件列表:
对于候选执行 execution,execution.[[ReadsFrom]] 是满足以下条件的最小事件关系:
对于候选执行 execution,execution.[[HostSynchronizesWith]] 是环境提供的有关环境特定事件的严格偏序,至少满足以下条件:
对于候选执行 execution,execution.[[SynchronizesWith]] 是满足以下条件的最小事件关系:
对于候选执行 execution,execution.[[HappensBefore]] 是满足以下条件的最小事件关系:
true
false
如果 SharedDataBlockEventSet(execution) 中没有事件在争用数据,则该执行 execution 是数据争用自由的。
如果程序的所有执行都不会数据争用,则该程序不会数据争用。
内存模型可确保无争用数据程序的所有事件的顺序一致性。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
内存模型
内存一致性模型,也叫 内存模型,指定通过访问由
SharedArrayBuffer
支持的TypedArray
实例以及通过Atomics
对象上的方法产生的 Shared Data Block 事件的可能顺序。当程序没有数据争用,事件的顺序显示为顺序一致,即每个 代理 的动作交错。当程序存在数据争用,共享内存操作可能会出现顺序不一致。例如,程序可能会表现出违反因果关系的行为和其他怪异的地方。这些怪异来自编译器转换和CPU的设计(例如乱序执行和推测)。内存模型既定义了程序表现出顺序一致行为的精确条件,也定义了从数据竞争中读取的可能值。也就是说,没有不确定的行为。内存模型被定义为对求值过程中
SharedArrayBuffer
上的 抽象操作 或Atomics
对象上的方法所引入的事件的关系约束。内存模型基本原理
共享内存访问(读取和写入)分为以下两组,原子访问和数据访问。原子访问是顺序一致的,即,代理群集 中所有代理都同意对事件进行严格的总排序。非原子访问没有所有代理都同意的严格总排序,即未排序。
Shared Data Block event 是 ReadSharedMemory,WriteSharedMemory, ReadModifyWriteSharedMemory 记录 其中之一。
这些事件通过 抽象操作 或原子对象上的方法引入的。
一些操作可能还会引入 Synchronize 事件。Synchronize event 没有字段,存在纯粹是为了直接限制其他事件的允许顺序。
除了 Shared Data Block 和 Synchronize event,还有环境特定事件。
假设 ReadSharedMemory,WriteSharedMemory 或 ReadModifyWriteSharedMemory 事件的范围是从 [[ByteIndex]] 到 [[ByteIndex]] + [[ElementSize]] - 1 的连续整数的集合。当两个事件具有相同的 [[Block]] 并且元素范围相等时,这两个事件的范围相等。当事件具有相同的 [[Block]] 并且它们的范围不相等,同时它们的交集非空,那么这两个事件的范围重叠。当事件具有不同的 [[Block]] 并且它们的范围即不相等也不相交,则这两个事件不相交。
代理事件记录
选择的值记录
候选执行
候选执行的关系
agent-order
对于候选执行 execution,execution.[[AgentOrder]] 是满足以下条件的最小事件关系:
reads-bytes-from
对于候选执行 execution,execution.[[ReadsBytesFrom]] 是数学函数,可将 SharedDataBlockEventSet(execution) 中的事件映射到满足以下条件的 SharedDataBlockEventSet(execution) 中的事件列表:
reads-from
对于候选执行 execution,execution.[[ReadsFrom]] 是满足以下条件的最小事件关系:
host-synchronizes-with
对于候选执行 execution,execution.[[HostSynchronizesWith]] 是环境提供的有关环境特定事件的严格偏序,至少满足以下条件:
synchronizes-with
对于候选执行 execution,execution.[[SynchronizesWith]] 是满足以下条件的最小事件关系:
happens-before
对于候选执行 execution,execution.[[HappensBefore]] 是满足以下条件的最小事件关系:
竞争
true
true
false
数据争用
true
true
false
数据争用自由
如果 SharedDataBlockEventSet(execution) 中没有事件在争用数据,则该执行 execution 是数据争用自由的。
如果程序的所有执行都不会数据争用,则该程序不会数据争用。
内存模型可确保无争用数据程序的所有事件的顺序一致性。
共享内存准则
The text was updated successfully, but these errors were encountered: