/
662.txt
123 lines (96 loc) · 6.75 KB
/
662.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
[2] 元の[[アルゴリズム]]やその実行元とは別に別の[[アルゴリズム]]を同時に実行させることを[DFN[[RUBYB[並列で]@en[in parallel]]]]の実行といいます。
* 仕様書
[REFS[
- [1] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-09-19 23:39:59 +09:00]] 版) <https://html.spec.whatwg.org/#in-parallel>
]REFS]
* 動作
[3] ある[[アルゴリズム]]が[[並列]]に実行するという時、その[[アルゴリズム]]の手順は[[イベントループ]]など他の処理と同時に動作することを表しています。 [SRC[>>1]]
[4] その実装方法は例えば[[プロセス]]を分離したり[[スレッド]]を使ったり、
[[時分割]]の[[協調マルチタスク]]としたりと色々と考えられますが、
仕様上は特に限定されていません [SRC[>>1]]。
* 並列に動作するアルゴリズム
[5] [[Webブラウザー]]上で[[並列]]に動作する[[アルゴリズム]]には、次のものがあります。
[FIG(short list)[
- メインの[[イベントループ]]
- [[ワーカー]]の[[イベントループ]]
]FIG]
[6] [[イベントループ]]自体は[[並列]]に動作するとは明記されていませんが、
常時動作するとの要件を満たすためには相互に[[並列]]に動作させるしかありません。
[7] [[ワーカー]]の[[イベントループ]]は [[run a worker]] から呼び出されますが、
この[[アルゴリズム]]は新しい[[並列]]な実行環境を作成するものです。
[8] 次に示す[[アルゴリズム]]の一部または全部は仕様書上「[RUBYB[[[並列]]で]@en[in parallel]]」
と明記されており、それぞれ[[並列]]に実行されます。
[FIG(short list)[
- [[スピン]]
- [[セッション履歴イベントループ]]
- [[fetch]] に関わるいくつかのアルゴリズム
- [CODE(JS)@en[[[document.load]]]]
- [CODE(HTMLe)@en[[[canvas]]]] の [CODE(DOMm)@en[[[toBlob]]]]
- [[downloading hyperlinks]]
- [[application cache download process]]
- [CODE(DOMm)@en[[[setTimeout]]]]、[CODE(DOMm)@en[[[setInterval]]]]
- [CODE(JS)@en[[[new]] [[Worker]]]]
- [CODE(JS)@en[[[new]] [[SharedWorker]]]]
- [CODE(DOMi)@en[[[EventSource]]]] の [[reestablish the connection]]
- [CODE(DOMm)@en[[[postMessage]]]]
- [CODE(HTMLa)@en[[[ping]]]]
- [[favicon]]
- [CODE(JS)@en[[[new]] [[EventSource]]]]
- [CODE(JS)@en[[[new]] [[WebSocket]]]]
- [CODE(JS)@en[[[new]] [[Notification]]]] [SRC[[[Notifications API]]]]
- [[cache failure steps]]
- [[kill a worker]]
- [[terminate a worker]]
- [CODE(HTML)@en[[[<input type=file>]]]] の [CODE(DOMm)@en[[[click]]]]
- [CODE(DOMm)@en[[[createImageBitmap]]]]
- [[update the image data]]
]FIG]
;; 出典のないものは [[HTML Standard]] より。
;; [9] これらの一部は[[同期区間]]をも有しています。
;; [10] [[HTML Standard]] では「in the background」とも記述されていることがありますが、
いずれも [[in parallel]] と併用されています。
[13] 次に示す[[アルゴリズム]]の一部または全部は仕様書上「[RUBYB[非同期的に]@en[asynchronously]]」
実行すると規定されており、それぞれ[[並列]]に実行されます。
[FIG(middle list)[
- [[navigate]]
- [[ファイルシステム]]からの読み込み [SRC[[[File API]]]]
- [CODE(DOMm)@en[[[getUserMedia]]]] [SRC[[[getUserMedia]]]]
- [CODE(DOMi)@en[[[FontFace]]]] 関係のいくつかの処理 [SRC[[[css-font-loading]]]]
- [[バイブレーションを実施]] [SRC[[[Vibration API]]]]
]FIG]
;; [12] [[HTML Standard]] で「asynchronously」と記述されていた箇所は明確化のためすべて
[[in parallel]] に置き換えられました [SRC[>>11, >>16]]。 >>13 のアルゴリズムはそれ以前に
[[HTML Standard]] の作法を真似たものの、追随していないものです。
* 通信
[14] いくつかの[[アルゴリズム]]では[[同期区間]]という形で[[イベントループ]]との同期待ちが行われます。
;; [15] 実際には[[並列]]に実行される手続きの最後で[[マイクロタスク]]を追加するという形で実装されているかもしれません。
[105] [CODE(DOMi)@en[[[ApplicationCache]]]] の [CODE(DOMm)@en[[[abort]]]] [[メソッド]]は[RUBYB[裏で動いている]@en[in the background]]処理に対して[DFN[[RUBYB[信号を送信]@en[send a signal]]]]します。
* 停止
[72] ある[[アルゴリズム]]が同時に実行中の他の[[アルゴリズム]]を[RUBYB[停止]@en[abort]]させることがあります。
[FIG(list)[
- [73] [[fetch]] はしばしば停止させられることがあります。
-- [74] [[update the image data]]
-- [78] [[[CODE(HTMLe)@en[track]]処理モデルの開始]]
-- [80] [CODE(DOMi)@en[[[EventSource]]]] の [CODE(DOMm)@en[[[close]]]]
-- [81] [CODE(DOMi)@en[[[EventSource]]]] の [[forcibly close]]
-- [82] [CODE(DOMi)@en[[[EventSource]]]] が[[ごみ収集]]された場合
- [75] [[媒体要素読込算法]]が[[資源選択算法]]を停止させることがあります。
- [76] [[seek]] が同時に実行中の [[seek]] を停止させることがあります。
- [79] [[ワーカーを殺す]][[算法]]、[[ワーカーを終端させる]][[算法]]は実行中の[[スクリプト]]を停止させます。
- [77] [[[CODE(HTMLe)@en[track]]処理モデルの開始]]は他の[[算法]]は停止させませんが、
その代わりに動作中の同じ[[算法]]に処理を委ねて自身が停止します。
- [[update the image data]]
- [[バイブレーションを実施]]
]FIG]
* 歴史
[REFS[
- [11] [CITE@en[Web Applications 1.0 r8799 Stop using the word 'asynchronously', and reduce usage of the word 'synchronous'.]] ([TIME[2014-09-20 08:19:00 +09:00]] 版) <https://html5.org/r/8799>
- [16] [CITE@en[Sync with https://html5.org/r/8799 (Stop using the word 'asynchronously'... · fcc802a · ResponsiveImagesCG/picture-element]] ([TIME[2014-09-23 06:25:10 +09:00]] 版) <https://github.com/ResponsiveImagesCG/picture-element/commit/fcc802a79442529b3b5fb9eed4b8429c0699682a>
- [106] [CITE@en[Asynchronously -> in parallel · b2279a9 · whatwg/notifications]]
( ([TIME[2014-10-07 08:36:52 +09:00]] 版))
<https://github.com/whatwg/notifications/commit/b2279a91cfb2dcb6002ac54b7c5e3fe4dfc5fd91>
- [107] [CITE@en[Use "in parallel" · 21c1135 · whatwg/fetch]]
( ([TIME[2014-10-07 08:39:21 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/21c113517998443dbc361be36f96524f3ee3a586>
- [17] [CITE@en[Make update the image data run when the document becomes active. · ee68507 · ResponsiveImagesCG/picture-element]] ([TIME[2014-10-23 10:40:49 +09:00]] 版) <https://github.com/ResponsiveImagesCG/picture-element/commit/ee685075cd65f02022d74b7932073fda4102d15f>
]REFS]