JavaScriptからPythonの同時(上)へ

私は、CPUの同時実行性を探る分析とJavaScriptを2つの部分に分けPythonの同時実行、パートを探る比較することによって、同時ネットワークIOは次探ります。

テスト環境:

操作系统: win10 x64
CPU: Intel i5-8400 6核6线程
复制代码

:一般的には3つの方法の同時動作実現のプロセススレッドコルーチンを

テストのための単純な時間のかかる機能:再帰フィボナッチ列の N個のアイテムの計算。

CPU集約型のコンピューティングタスクのために、並行プログラムの実行時間を短縮、効率を高めるを通じて、マルチコアCPUを利用するようにしてください。ここでは、JavaScriptとPythonはこれら三つの方法並行性とCPUコアの数の利用を使用してどのように見てみましょう。

プロセス

プロセスは、システムリソースの割り当てとスケジューリングの基本単位です。

JavaScriptを

実行していないブラウザJavaScript、マルチプロセスの概念は、これだけ考えるNode.js上で複数のプロセスを。

並列に実行されているので、異なるプロセスが最高これを達成するために、我々は、ネイティブモジュールを選択し、異なるコア上で利点を再生することができますcluster

コードは以下の通りであります:

結果をより正確にするためには、オープンリソースモニタ、それぞれが上で実行されているCPUを表示します。

結果:

消耗时间(s): 8.107
消耗时间(s): 8.118
消耗时间(s): 8.16
消耗时间(s): 8.175
消耗时间(s): 8.209
消耗时间(s): 8.253
复制代码

8.253秒での合計時間はそう。

さらに、コードは、単一のプロセスを実行することを確認するには:

シングルプロセスの結果: 消耗时间(s): 7.361

時間は誤差の範囲内、考慮時間の消費の創造と破壊のプロセスを取って、マルチプロセスの数よりもわずかに小さいです。

パイソン

Python演算処理モジュールmultiprocessing、我々はあなたがすべてのフルを実行できるかどうかの核6参照開始したのと同じプロセス。

コードは以下の通りであります:

CPU監視はまた、6コア・コンピューティング・タスクが実行される例を示します。

結果

消耗时间(s): 8.683971881866455
消耗时间(s): 8.699971675872803
消耗时间(s): 8.71097183227539
消耗时间(s): 8.84197187423706
消耗时间(s): 8.863972425460815
消耗时间(s): 8.900972843170166
复制代码

総実行時間は約8.9秒です。

ただ見た目より実行時間JavaScriptも遅いのでDiudiuは、点に留意する必要があるJavaScriptコードの数は、列45で計算されたPython最初の38を数えます!

また、いくつかの単一プロセス計算の実装では、複数のプロセスを検証し、比較します。

消耗时间(s): 8.092010259628296

実行時間も非常に近いです。

結論

JavaScript(Node.js)そしてPython、複数のプロセスは、コンピューティングタスクを実行する際に効果的マルチコアCPUの利用効率を向上させることができ、ネイティブモジュールの動作方法を提供します。

スレッド

プロセスは、1つ以上のスレッドを持つことができ、一般的に好ましい同時操作として、コンテキストスイッチの低コスト化、軽量化相対スレッドの観点で処理します。

JavaScriptを

フロントエンドエンジニアはめったにスレッドの概念を理解していない:ブラウザのHTML5の標準のみをサポートするために提案されるまで、web workerマルチスレッドを作成する方法を、Node.jsのは、それ以降のバージョンが唯一の12の使用はサポートされworker_threadsモジュールマルチスレッドコンピューティングを。早くまとめないJavaScript実行環境にモジュールAPI、スレッドの開発シールドコンセプトに関連したスレッドを。

ウェブワーカー

ブラウザ側のマルチスレッド実行JavaScriptコードが実行されるように、2つの部分に分割されjsた文書との導入jsページングファイル。

コードは以下の通りであります:

ローカル起動およびアクセスサーバでは、マルチコアの実行には、画像を監視しています。

結果:

消耗时间(s): 15.989
消耗时间(s): 16.109
消耗时间(s): 16.204
消耗时间(s): 16.874
消耗时间(s): 16.876
消耗时间(s): 16.971
复制代码

総実行時間は約16.9秒です。

結果は、より説得力のあるようにするために、我々は、ブラウザのコンソール内の関連するコードの実装を見て

マルチスレッド実行時間よりわずかに少ないです。

以上1倍の実装に関して最後のNode.js、ブラウザのスレッド性能が高くないようです。

worker_threads

マルチコアがそうされたの利点を取ることができないNode.jsと批判、問題に対するパッチと呼ばれる新しいバージョンを検討しました。

Node.js次のように終了コードは次のようになります。

CPUの監視結果:

結果:

消耗时间(s): 8.229
消耗时间(s): 8.282
消耗时间(s): 8.299
消耗时间(s): 8.403
消耗时间(s): 8.417
消耗时间(s): 8.44
复制代码

合計8.44秒の時間とかなり分けて実行。

結論

ブラウザとNode.jsサポートマルチスレッドが、実行性能のブラウザとして明らかに良くないNode.jsので、使用web workerエンジニアは慎重にする必要があります。

パイソン

Pythonネイティブモジュールは、threadingマルチスレッド動作を提供します。具体的なコードは次のよう

チャートのモニタリング:

全容量でそれぞれのコアではなく、あるべきで利用図波形を参照。

結果は満足のいくものではありません。

消耗时间(s): 38.476489543914795
消耗时间(s): 41.6956250667572
消耗时间(s): 45.613648414611816
消耗时间(s): 47.564653396606445
消耗时间(s): 47.68662452697754
消耗时间(s): 48.57262468338013
复制代码

48.5s、単一プロセスの6倍の実行時間の合計時間。

結論

ビューの時点からの出力は、Pythonスレッドが同時に実行されているが、効率を改善しませんでした。

コルーチン

コルーチンスレッドとスレッドは、オペレーティングシステムによってスケジュールされていることを、コルーチンは、ユーザーコードによって管理されている以外、やや似ています。軽量化、コストを切り替え相対的なスレッドコンテキストのために。

パイソン

申し訳ありませんが、JavaScriptネイティブモジュールはまだサポートされていません。Python3実際には、積極的にコルーチンの概念を導入し、実際のテスト結果は、効果を確認すること〜

コード:

CPUの監視:

結果:

消耗时间(s): 8.070001602172852
消耗时间(s): 16.14399790763855
消耗时间(s): 24.214999198913574
消耗时间(s): 32.300398111343384
消耗时间(s): 40.38105368614197
消耗时间(s): 48.451064109802246
复制代码

結論

CPU使用率のコルーチンやスレッドがほとんどであり、改善されませんでした。そして、ビューの出力点からではない真の並列実行。

概要

  • 最初の同時考慮せずにJavaScript実行効率を優れていますPython
  • 両方を効果的に効率を向上させるためにマルチコアCPUを利用する複数のプロセスを使用することができます。
  • スレッドJavaScript、優れたPythonグローバルインタプリタロック、マルチスレッドの同時実行に限られた状況ではなく、実装の効率を向上させることができません。
  • コルーチンJavaScript敗北、しかし、PythonCPU集約型の業務を処理するのコルーチンは良くありません。

オリジナルリンク:tech.gtxlab.com/js2py-async ...著者情報:朱デロング、人と未来シニアフロントエンドエンジニア。

おすすめ

転載: juejin.im/post/5dbaac055188254880246ab5