問題タブ [executioncontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 内部関数が返されたときにJavaScriptが外部関数の実行コンテキストを保持する方法は?
私はこれらの 2 つのブログを読んでいます: David Shariff によって発行された実行コンテキストとスコープ チェーンでは、JavaScript の実行コンテキストとスコープ チェーンの概念について詳しく説明しています。
上記のブログを読んだ後ではっきりしないことの 1 つは、javascript が親関数の実行コンテキストがガベージ コレクションされるのをどのように防止するかということです。
次の非常に単純なコードを見てみましょう。
外部関数が呼び出されると、内部関数へのポインターを取得します。したがって、この段階では、内部関数が作成/定義されていますが、まだ呼び出されていません。
ブログによると、関数が呼び出されている場合にのみ、スコープ チェーンが確立されます。したがって、内部関数が呼び出される前に、外部関数の実行コンテキストを参照するポインターはないと思います。では、js エンジンは外部関数の実行コンテキストがガベージ コレクションされるのをどのように防ぐのでしょうか?
scala - Scalaの不適切な実行コンテキストによってスプレーAPIがブロックされましたか?
スプレー API を使用して、サーバーからの要求をリッスンします。ある特定の scala クラスでの計算は、Spray がアプリケーション全体で応答するのをブロックしてしまいます。これは問題を少し単純化したものですが、さらに詳しい情報を提供できます。必要に応じて。
このインポートを追加すると、問題が解決しました:
これがどのように、またはなぜ機能したかを誰かが説明できますか?
================================================== =
編集:
OuterClass は SomeClass をインスタンス化しますが、それ自体が ExecutionContext パラメーターでインスタンス化されることはありません。デフォルトでグローバル実行コンテキストを使用しているように見えますが、それがブロックされている理由ですか?
javascript - Javascript: 奇妙な部分を理解する - 関数スコープが説明どおりに機能しない
私はこれを何百万通りも書き直そうとしましたが、Tony Alicea がこのコードから結果 1, 2, undefined, 1 を生成する方法を理解できません。
https://www.youtube.com/watch?v=Bv_5Zv5c-Ts&t=74m30sでコードとビデオを見ることができます。彼はこれを実行し、1、2、undefined、1 を生成します。私はそれを実行し続け、1 を取得します。 2、未定義、2. グローバル スコープと a() のスコープの両方で myVar が 2 として存在する原因となる何かがありますか? 私のコードは現在https://testing-mdmitchellnyc.c9.io/hello-world.htmlに投稿されています。
.net - .net イベントは現在の ExecutionContext を流れますか?
+= スタイルの .net イベント登録 (C#) のほぼ直前に、実行コンテキスト フローの抑制に関するコードの最適化が見られます。
なんで?それは、通常、.net イベントが現在の実行コンテキストを流れているためですか?
javascript - eval なしでグローバル実行コンテキストで JavaScript を実行できますか
Javascript ブロックを抽出してマージ、縮小、および非同期で実行する PHP フレームワークを作成しています。
だから私はJavascriptコードの実行を遅らせるのが好きです.
ラップされたコードがグローバル変数を作成する必要がない限り、これは正常に機能します (私はラップされたコードの作成者ではないため、そのコードを修正したくありません) 代わりに、そのコードをグローバル実行コンテキストで実行したいと考えています。
例えば:
次のようになります。
現在の解決策は、JavaScriptを文字列に入れてから
または私のライブラリ内のglobalEval呼び出しで
しかし、フレームワークのユーザーにとってデバッグが容易な、より読みやすいバージョンに固執したいと思います。
callback.call(window) などを使用してライブラリ内の実行コンテキストを変更することは可能ですか?
javascript - JavaScript の巻き上げと実行コンテキストを理解する
「ホイスト」という用語について読んだことがありますが、よくわかりません。変数が未定義に設定されているときに関数が実行されるのはなぜですか?
興味深いのは、変数にエラーが表示されなかったことです。しかし、それは未定義を示しました。しかし、変数を完全に削除すると、エラーが表示されます。つまり、変数はどこかに存在します。右?
しかし、それが存在する場合、なぜコンパイラはそれをコンパイルできず、ここで関数をコンパイルできないのでしょうか?
var a が巻き上げられていることはわかっています。エンジンが変数と関数を別の方法で処理している理由、つまり実行コンテキスト中に舞台裏で起こっていることを知りたいです。
エンジンが実行コンテキストを作成する方法についての詳細な説明は役に立ちます。
この質問では、javascript エンジンが関数と変数でどのように異なる動作をするかについて質問しています。そして、実行フェーズの作成状態と実行状態で正確に何が起こっているのか。したがって、重複した質問ではありません。
java - ブロック対応の実行コンテキストを作成するにはどうすればよいですか?
何らかの理由で、これを実装することに頭を悩ませることはできません。Elastic Searchを呼び出すアプリケーションをPlayで実行しています。私の設計の一環として、私のサービスは、このブログ投稿に示されているように、scala future でラップされた Java API を使用しています。その投稿のコードを更新して、次のようにブロッキング I/O を実行することを ExecutionContext に示唆しました。
ES に送信するクエリを作成する実際のサービスは、コンストラクター パラメーターとして executionContext を受け取り、エラスティック サーチの呼び出しに使用します。これを行ったのは、play が使用するグローバル実行コンテキストが、ES へのブロッキング呼び出しによってスレッドが拘束されないようにするためです。この SO コメントは、グローバル コンテキストのみがブロックを認識していることに言及しているため、独自のコンテキストを作成する必要があります。その同じ投稿/回答には、ForkJoin プールの使用に関する多くの情報がありますが、それらのドキュメントに書かれている内容を取得し、ブロッキング ドキュメントのヒントと組み合わせて、ブロッキングに応答する実行コンテキストを作成する方法がわかりません。ヒント。
私が抱えている問題の 1 つは、そもそもブロッキング コンテキストにどのように対応すればよいかわからないことだと思います。私はベストプラクティスを読んでいましたが、それが使用する例はスレッドの無制限のキャッシュです:
ここでは、無制限の「キャッシュされたスレッドプール」を使用することを好むため、制限がないことに注意してください。ブロッキング I/O を行う場合、ブロックできる十分な数のスレッドが必要であるという考えがあります。ただし、無制限が多すぎる場合は、ユースケースに応じて、後で微調整できます。このサンプルのアイデアは、ボールを転がすことです。
これは、ForkJoin でサポートされているスレッド プールを使用して、非ブロッキング I/O を処理するときにキャッシュされたスレッドを使用し、IO をブロックするための新しいスレッドを作成する必要があることを意味しますか? または、他の何か?個別のスレッド プールの使用についてオンラインで見つけたほぼすべてのリソースは、Neophytes ガイドが行うことを行う傾向があります。つまり、次のようになります。
さまざまなスレッド プールを調整する方法は、個々のアプリケーションに大きく依存するため、この記事の範囲を超えています。
アプリケーションに依存することはわかっていますが、この場合は、何らかのタイプのブロッキング対応の ExecutionContext を作成し、スレッドを管理するための適切な戦略を理解したい場合です。コンテキストがアプリケーションの特定の部分用である場合、固定スレッド プール サイズを作成blocking
し、そもそもキーワードを使用/無視しないようにする必要がありますか?
私はとりとめのない傾向があるので、回答で探しているものを分解しようとします。
- コード!これらのドキュメントをすべて読んでも、ブロッキングを意識したコンテキストをコーディングすることはできないと感じているので、例を示していただければ幸いです。
- ブロッキングスレッドを処理する方法に関するリンクまたはヒント。つまり、それらのために新しいスレッドを無限に作成し、使用可能なスレッドの数を確認し、多すぎる場合は拒否します。他の戦略
- ここでパフォーマンスのヒントを探しているわけではありません。テストでしか得られないことはわかっていますが、そもそもコンテキストをコーディングする方法がわからない場合はテストできません! ForkJoins と threadpools の例を見つけましたが、重要な部分が欠けてい
blocking
ます。
ここで長い質問をして申し訳ありません。私が見ているものの感覚をあなたに伝えようとしているだけで、1 日以上この問題に頭を悩ませようとしていて、外部の助けが必要です。
編集:これを明確にするために、ElasticSearch サービスのコンストラクターの署名は次のとおりです。
そして、私のアプリケーションの起動コードには、次のようなものがあります。
私はPlay の contexts に関する推奨事項も読んでいますが、ヒントのブロックについてはまだ何も見ていませんBlockContext
。