Skip to content

DNET_JavaScriptThreading

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

JavaScriptのスレッド処理

概要

setTimeoutsetInterval、最新の「Web Workers」を使用可能。

並行処理

疑似の並行処理

  • もともとJavaScriptはシングルスレッドの実装しかできなかった。
  • このため、メッセージループを手動でタイムスライスするような疑似の並行処理を実装できる。

setTimeout

指定された遅延の後に、コードの断片または関数を”一回だけ”実行する。

setInterval

指定された遅延の後に、コードの断片または関数を”繰り返し”実行し続ける。

真の並行処理

Web Workers (JavaScript)

前述のsetTimeoutsetIntervalは、疑似の「並行処理」で、
Web Workersでスレッド機能を追加し、真の「並行処理」ができるようになる。

非同期

  • 呼び出し元(関数やUI)をブロックしない。
  • 呼び出し元と、並列して処理を行う。という意味で前述と同じ。
  • しかし、コチラは、イベントキュー・ベースのシングルスレッド処理。

非同期の実装方式

コールバック

並行処理非同期で使用されるコールバック

従来型コールバック

以下のように、コールバック地獄に陥り易い。

fetchSomething1(function() {
  fetchSomething2(function() {
    fetchSomething3(function() {
      fetchSomething4(doSomethingFinally);
    });
  });
});

Promise (JavaScript)

Promiseではコールバックを関数に渡すかわりに、
コールバックを付属させたPromiseオブジェクトをリターンすることで、
従来型コールバックにおけるコールバック地獄を解決する。

参考

setTimeout

setInterval

その他

移行メモ

  • 元 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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally