具体的には、同期メソッドの実行時間を検出できるメソッドはありますか? 実行時間が長すぎる場合は、率先してこのメソッドを強制終了します。
typecho2017-06-15 09:25:26
これは同期方法によって異なりますか?
それがサードパーティのライブラリによって提供されるメソッドである場合、それ自体が stop メソッドを提供するかどうかによって異なります。そうでない場合は、何もできません。
ファイル i/o/delete/create が関係する場合は、それを停止できない場合がありますが、エラーが報告された後に元の状態に戻す逆関数を作成することはできます
このメソッドが自分で作成され、複数のサブ関数がある場合は、関数内でタイマーを定義し、各サブ関数を実行する前に時間が許容値を超えているかどうかを確認できます。これは回避策です。
世界只因有你2017-06-15 09:25:26
JS の観点から見ると、同期メソッドを実行すると、アプリケーション全体がその中でブロックされます。このとき、setTimeout によって非同期的にトリガーされたコールバックであっても、同期メソッドの実行が完了した後にのみイベント ループで実行できます。そのため、同期メソッドでは実行できません。自身の実行時間を確認し、自身を強制終了してください。
コンピューターサイエンスの観点から見ると、尋ねられる質問は実際には古典的な停止問題です:
停止問題(英語: halting問題)とは、論理学および数学における計算可能性理論の問題である。平たく言えば、停止問題とは、プログラムが制限時間内に動作を終了できるかどうかを判断する問題です。この問題は、プログラム P が存在するかどうかの判定問題と等価です。入力された任意のプログラム w に対して、w は制限時間内に終了するか、無限ループするかが判断できます。
この問題は NP 困難です。これは、この問題を直接解決できる、許容可能な時間計算量を備えたアルゴリズムが存在しないことを意味します。
しかし、学術的なアルゴリズムを超えて見ると、Web Worker や PM2 などのプロセス管理メカニズムの使用など、エンジニアリングでは多くの回避策がありますが、ここでは説明しません。
怪我咯2017-06-15 09:25:26
それならマルチスレッドするしかない…
http://www.w3school.com.cn/ht…
でもjsをどうやってkillするのかも謎…
結局…直接できます非同期を使用したほうが良いでしょうか||||
黄舟2017-06-15 09:25:26
リーリー
これは確かに解決策ではないことを思い出しました。別のローエンドの解決策はこれだけかもしれません。 リーリー
必ずしもすべてのビジネスに適しているわけではなく、ドット自体がプロセスを遅くします。女神的闺蜜爱上我2017-06-15 09:25:26
Webworker は別のスレッドで計算ロジックを実行でき、onmessage メソッドは実行結果を受け入れることができ、terminate
メソッドは Webworker の実行を終了できます