-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_JavaScriptThreading
setTimeout や setInterval、最新の「Web Workers」を使用可能。
- もともとJavaScriptはシングルスレッドの実装しかできなかった。
- このため、メッセージループを手動でタイムスライスするような疑似の並行処理を実装できる。
指定された遅延の後に、コードの断片または関数を”一回だけ”実行する。
指定された遅延の後に、コードの断片または関数を”繰り返し”実行し続ける。
前述のsetTimeoutやsetIntervalは、疑似の「並行処理」で、
Web Workersでスレッド機能を追加し、真の「並行処理」ができるようになる。
- 呼び出し元(関数やUI)をブロックしない。
- 呼び出し元と、並列して処理を行う。という意味で前述と同じ。
- しかし、コチラは、イベントキュー・ベースのシングルスレッド処理。
以下のように、コールバック地獄に陥り易い。
fetchSomething1(function() {
fetchSomething2(function() {
fetchSomething3(function() {
fetchSomething4(doSomethingFinally);
});
});
});Promiseではコールバックを関数に渡すかわりに、
コールバックを付属させたPromiseオブジェクトをリターンすることで、
従来型コールバックにおけるコールバック地獄を解決する。
- window.setTimeout - Web API インターフェイス | MDN
https://developer.mozilla.org/ja/docs/Web/API/Window/setTimeout
- window.setInterval - Web API インターフェイス | MDN
https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval
-
Promiseとasync/awaitでJavaScriptの非同期処理をシンプルに記述する
https://sbfl.net/blog/2016/07/13/simplifying-async-code-with-promise-and-async-await/ -
JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側
https://www.infoq.com/jp/articles/js_multithread_2 -
JavaScriptの非同期処理を並列処理と勘違いしていませんか? - Qiita
https://qiita.com/klme_u6/items/ea155f82cbe44d6f5d88
移行メモ
- 元 Wiki の「非同期」節は、本文の無い見出し 3 つ(従来型コールバック / Promise / async/await)がリンクとして並んでいるだけだったため、 「非同期の実装方式」の箇条書きにまとめた。
- 元 Wiki では見出しそのものが他ページへのリンクになっていた箇所 (「Web Workers (JavaScript)」「Promise (JavaScript)」)は、 GitHub Wiki では見出しからアンカが生成されるため、 見出しをプレーン・テキストとし、リンクは直下の本文に置いた。
- PukiWiki のページ内アンカ(
#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替えた。 なお、元 Wiki の概要にある「setTimeout」「setInterval」「Web Workers」への リンクはアンカ ID が実際の見出しのものと一致しておらずリンク切れだったため、 正しい見出しへのリンクとした。- リンク先が未移行のページは、移行先のファイル名を
`DNET_○○.md`の形で示し TODO.md に登録した。
Tags: 移行, JavaScript, スレッド, 並行処理, 非同期, setTimeout, setInterval, Web Workers, Promise, async/await
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。