Skip to content

Commit 8f852c0

Browse files
committed
docs(Atomics): Atomics.wake() rename to Atomics.notify()
1 parent 2e082a3 commit 8f852c0

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

docs/arraybuffer.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,9 +1215,11 @@ self.addEventListener('message', (event) => {
12151215

12161216
上面代码将共享内存的偶数位置的值改成`1`,奇数位置的值改成`2`
12171217

1218-
**(3)Atomics.wait(),Atomics.wake()**
1218+
**(3)Atomics.wait(),Atomics.notify()**
12191219

1220-
使用`while`循环等待主线程的通知,不是很高效,如果用在主线程,就会造成卡顿,`Atomics`对象提供了`wait()``wake()`两个方法用于等待通知。这两个方法相当于锁内存,即在一个线程进行操作时,让其他线程休眠(建立锁),等到操作结束,再唤醒那些休眠的线程(解除锁)。
1220+
使用`while`循环等待主线程的通知,不是很高效,如果用在主线程,就会造成卡顿,`Atomics`对象提供了`wait()``notify()`两个方法用于等待通知。这两个方法相当于锁内存,即在一个线程进行操作时,让其他线程休眠(建立锁),等到操作结束,再唤醒那些休眠的线程(解除锁)。
1221+
1222+
`Atomics.notify()`方法以前叫做`Atomics.wake()`,后来进行了改名。
12211223

12221224
```javascript
12231225
// Worker 线程
@@ -1240,10 +1242,10 @@ const newArrayValue = 100;
12401242
Atomics.store(sharedArray, 0, newArrayValue);
12411243
const arrayIndex = 0;
12421244
const queuePos = 1;
1243-
Atomics.wake(sharedArray, arrayIndex, queuePos);
1245+
Atomics.notify(sharedArray, arrayIndex, queuePos);
12441246
```
12451247

1246-
上面代码中,`sharedArray``0`号位置改为`100`,然后就执行`Atomics.wake()`方法,唤醒在`sharedArray``0`号位置休眠队列里的一个线程。
1248+
上面代码中,`sharedArray``0`号位置改为`100`,然后就执行`Atomics.notify()`方法,唤醒在`sharedArray``0`号位置休眠队列里的一个线程。
12471249

12481250
`Atomics.wait()`方法的使用格式如下。
12491251

@@ -1256,14 +1258,14 @@ Atomics.wait(sharedArray, index, value, timeout)
12561258
- sharedArray:共享内存的视图数组。
12571259
- index:视图数据的位置(从0开始)。
12581260
- value:该位置的预期值。一旦实际值等于预期值,就进入休眠。
1259-
- timeout:整数,表示过了这个时间以后,就自动唤醒,单位毫秒。该参数可选,默认值是`Infinity`,即无限期的休眠,只有通过`Atomics.wake()`方法才能唤醒。
1261+
- timeout:整数,表示过了这个时间以后,就自动唤醒,单位毫秒。该参数可选,默认值是`Infinity`,即无限期的休眠,只有通过`Atomics.notify()`方法才能唤醒。
12601262

1261-
`Atomics.wait()`的返回值是一个字符串,共有三种可能的值。如果`sharedArray[index]`不等于`value`,就返回字符串`not-equal`,否则就进入休眠。如果`Atomics.wake()`方法唤醒,就返回字符串`ok`;如果因为超时唤醒,就返回字符串`timed-out`
1263+
`Atomics.wait()`的返回值是一个字符串,共有三种可能的值。如果`sharedArray[index]`不等于`value`,就返回字符串`not-equal`,否则就进入休眠。如果`Atomics.notify()`方法唤醒,就返回字符串`ok`;如果因为超时唤醒,就返回字符串`timed-out`
12621264

1263-
`Atomics.wake()`方法的使用格式如下。
1265+
`Atomics.notify()`方法的使用格式如下。
12641266

12651267
```javascript
1266-
Atomics.wake(sharedArray, index, count)
1268+
Atomics.notify(sharedArray, index, count)
12671269
```
12681270

12691271
它的三个参数含义如下。
@@ -1272,24 +1274,24 @@ Atomics.wake(sharedArray, index, count)
12721274
- index:视图数据的位置(从0开始)。
12731275
- count:需要唤醒的 Worker 线程的数量,默认为`Infinity`
12741276

1275-
`Atomics.wake()`方法一旦唤醒休眠的 Worker 线程,就会让它继续往下运行。
1277+
`Atomics.notify()`方法一旦唤醒休眠的 Worker 线程,就会让它继续往下运行。
12761278

12771279
请看一个例子。
12781280

12791281
```javascript
12801282
// 主线程
12811283
console.log(ia[37]); // 163
12821284
Atomics.store(ia, 37, 123456);
1283-
Atomics.wake(ia, 37, 1);
1285+
Atomics.notify(ia, 37, 1);
12841286

12851287
// Worker 线程
12861288
Atomics.wait(ia, 37, 163);
12871289
console.log(ia[37]); // 123456
12881290
```
12891291

1290-
上面代码中,视图数组`ia`的第 37 号位置,原来的值是`163`。Worker 线程使用`Atomics.wait()`方法,指定只要`ia[37]`等于`163`,就进入休眠状态。主线程使用`Atomics.store()`方法,将`123456`写入`ia[37]`,然后使用`Atomics.wake()`方法唤醒 Worker 线程。
1292+
上面代码中,视图数组`ia`的第 37 号位置,原来的值是`163`。Worker 线程使用`Atomics.wait()`方法,指定只要`ia[37]`等于`163`,就进入休眠状态。主线程使用`Atomics.store()`方法,将`123456`写入`ia[37]`,然后使用`Atomics.notify()`方法唤醒 Worker 线程。
12911293

1292-
另外,基于`wait``wake`这两个方法的锁内存实现,可以看 Lars T Hansen 的 [js-lock-and-condition](https://github.com/lars-t-hansen/js-lock-and-condition) 这个库。
1294+
另外,基于`wait``notify`这两个方法的锁内存实现,可以看 Lars T Hansen 的 [js-lock-and-condition](https://github.com/lars-t-hansen/js-lock-and-condition) 这个库。
12931295

12941296
注意,浏览器的主线程不宜设置休眠,这会导致用户失去响应。而且,主线程实际上会拒绝进入休眠。
12951297

@@ -1335,3 +1337,4 @@ Atomics.xor(sharedArray, index, value)
13351337
- `Atomics.isLockFree(size)`:返回一个布尔值,表示`Atomics`对象是否可以处理某个`size`的内存锁定。如果返回`false`,应用程序就需要自己来实现锁定。
13361338

13371339
`Atomics.compareExchange`的一个用途是,从 SharedArrayBuffer 读取一个值,然后对该值进行某个操作,操作结束以后,检查一下 SharedArrayBuffer 里面原来那个值是否发生变化(即被其他线程改写过)。如果没有改写过,就将它写回原来的位置,否则读取新的值,再重头进行一次操作。
1340+

0 commit comments

Comments
 (0)