ホームページ  >  記事  >  ウェブフロントエンド  >  ブラウザのプロセスとスレッドの概要

ブラウザのプロセスとスレッドの概要

不言
不言転載
2018-11-17 16:29:361878ブラウズ

この記事では、ブラウザのプロセスとスレッドについて説明します。必要な方は参考にしていただければ幸いです。

プロセス

プロセスは、CPU リソース割り当ての最小単位です。

マルチプロセス: マルチプロセスとは、2 つ以上のプロセスが同じコンピュータ システムで同時に実行できるかどうかを指します。複数のプロセスのメリットは明らかです。たとえば、音楽を聴きながらエディターを開いてコードを入力することができ、エディターと音楽視聴ソフトウェアのプロセスはまったく干渉しません。

ブラウザはマルチプロセスです。ブラウザのプロセスには主に次の種類があります。

  1. ブラウザのプロセス: ブラウザのメインプロセス (調整とメイン制御を担当します)

  2. サードパーティのプラグイン プロセス: プラグインの各タイプは、プラグインが使用されるときにのみ作成されるプロセスに対応します

  3. GPU プロセス: 最大 1 つ、3D 描画に使用

  4. #ブラウザ レンダリング プロセス (カーネル) : デフォルト、タブ ページごとに 1 つのプロセス。相互に影響を与えることなく、ページのレンダリング、スクリプトの実行、イベント処理などを制御します (場合によっては、複数の空白のタブが 1 つのプロセスにマージされるなど、最適化されます)

#Web を閲覧するときは、同時に複数の新しいウィンドウを開きます。これには、複数の閲覧ウィンドウを開く必要がありますが、12 個以上のウィンドウを開くと、コンピューター全体の速度がどんどん遅くなります。

マルチプロセス ブラウザの利点

ブラウザ全体に影響を与えるページ レンダリングを回避します

ブラウザ全体に影響を与えるサードパーティのプラグインを回避します

マルチプロセスでマルチコアの利点を活かす

プラグインなどのプロセスを分離してブラウザの安定性を向上させるにはサンドボックスモデルを使うと便利です

素人向けにつまり、ユーザーが複数のウィンドウを開いた場合、ウィンドウの 1 つがクラッシュした場合、ドロップされてもブラウザ全体には影響せず、他のインターフェースは引き続き正常に実行されます。

#プロセスは 1 つ以上のスレッドで構成されます。スレッドは、プロセス内のコードの異なる実行ルートです。プロセスは互いに独立しています。ただし、プログラムのメモリ空間 (コード セグメント、データ セット、ヒープなどを含む) および一部のプロセス レベルのリソース (開いているファイルやシグナルなど) も含まれます。

  • ブラウザのレンダリング プロセス (ブラウザ カーネル) はマルチスレッドであり、主に次のカテゴリに分類されます:

  • GUI スレッド

Javascript エンジン スレッド

    イベント トリガー スレッド
  1. タイマー スレッド
  2. ネットワーク リクエスト スレッド
  3. GUI スレッド

  4. は、ブラウザ インターフェイスの HTML 要素をレンダリングします。このスレッドは、再描画が必要な場合、または何らかの操作によってリフローが発生した場合に実行されます。 Javascript エンジンがスクリプトを実行している間、GUI レンダリング スレッドは一時停止状態になります。これは、スレッドが「フリーズ」していることを意味します。
  5. Javascript エンジン スレッド

とも呼ばれます。 JS カーネルは、主に V8 エンジンなどの Javascript スクリプト プログラムの処理を担当します。もちろん、JavaScript エンジン スレッドは、JavaScript スクリプトの解析とコードの実行を担当します。

JavaScript はシングルスレッドです。

これは、スクリプト言語 Javascript の誕生の使命によるものです。JavaScript はページ上のユーザー操作を処理し、DOM ツリーを操作します。 , CSS スタイル ツリーは、動的で豊かなインタラクティブ エクスペリエンスとサーバー ロジックのインタラクティブな処理をユーザーに提供します。 JavaScript がこれらの UI を操作するマルチスレッド方法である場合 DOM では、UI 操作で競合が発生する可能性があります。 Javascript がマルチスレッドである場合、マルチスレッド対話下では、UI 内の DOM ノードが重要なリソースになる可能性があります。DOM を同時に操作する 2 つのスレッドがあり、1 つは変更を担当し、もう 1 つは削除を担当するとします。この時点では、参照が必要です。プロセッサは、どのスレッドの実行結果を有効にするかを決定します。もちろん、上記の問題はロックによって解決できます。しかし、ロックの導入による複雑化を避けるために、JavaScript は最初からシングルスレッド実行を選択しました。

GUI レンダリング スレッドと JavaScript エンジン スレッドは相互に排他的です。

JavaScript は DOM を操作できるため、インターフェイスのレンダリング中にこれらの要素のプロパティを変更すると (つまり、JavaScript スレッドと UI スレッドが同時に実行されます)、取得される要素データはレンダリングスレッドの前後で一貫性がなくなる可能性があります。したがって、予期しないレンダリング結果を防ぐために、ブラウザは GUI レンダリング スレッドと JavaScript エンジンが相互排他関係になるように設定し、JavaScript エンジンが実行されると GUI スレッドが一時停止され、GUI の更新がファイルに保存されます。エンジンスレッドがアイドル状態になるまでキューがすぐに実行されます。

JS によるページの読み込みのブロック

GUI レンダリング スレッドと JavaScript 実行スレッドは相互に排他的であるため、ブラウザが JavaScript プログラムを実行しているとき、GUI レンダリング スレッドはこれはキューに保存され、JS プログラムが完了するまで実行されません。そのため、JS の実行時間が長すぎると、ページのレンダリングが不安定になり、ページのレンダリングと読み込みがブロックされたように感じられます。

タイミング トリガー スレッド

ブラウザのタイミング カウンタは、JavaScript エンジンによってカウントされません。これは、JavaScript エンジンがブロックされたスレッド状態にある場合、タイミングの精度に影響を与えるためです。別のスレッド計画を通じてタイミングをトリガーします。

イベント トリガー スレッド

イベントがトリガーされると、スレッドは保留キューの最後にイベントを追加し、JS エンジンによる処理を待ちます。これらのイベントは、スケジュールされたタスクなどの現在実行されているコード ブロックからのもの、またはマウス クリックや AJAX 非同期リクエストなどのブラウザ カーネル内の他のスレッドからのものである可能性があります。ただし、JS のシングルスレッド関係により、これらのイベントはすべてキューに入れられ、JS エンジンによる処理を待ちます。

非同期 http リクエスト スレッド

XMLHttpRequest が接続された後、コールバック関数が設定されている場合、ステータスの変化が検出されると、ブラウザを通じて新しいスレッド リクエストが開きます。 , 非同期スレッドは状態変更イベントを生成し、それを JavaScript エンジンの処理キューに入れて処理を待ちます。

以上がブラウザのプロセスとスレッドの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。