問題タブ [thread-local]
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.
multithreading - pthreads を使用して、スレッドごとのインデックスを割り当てることはできますか?
私は自分のプロジェクト (Linux、ICC、pthreads) のいくつかの計測器を最適化しています。スレッドに一意のインデックスを割り当てるこの手法に関するフィードバックが欲しいので、それを使用してスレッドごとのデータの配列にインデックスを付けることができます。
古い手法では、pthread id に基づいて std::map を使用しますが、可能であればロックとマップ ルックアップを避けたいと思います (かなりの量のオーバーヘッドが発生します)。
これが私の新しいテクニックです:
コードの後半:
そう:
1) 2 つのスレッドがまったく同時に作成された場合、4 行目は競合状態になる可能性があるようです。もしそうなら - どうすればこれを回避できますか (できればロックなしで)? ここでアトミックインクリメントがどのように役立つかわかりません。
2) 何らかの形でスレッドごとのインデックスを作成するより良い方法はありますか? スレッドの作成時に TLS インデックスを何らかの方法で事前に生成することでしょうか?
java - クラスローダー固有のプロパティ
コンテナ内で実行される独立したアプリケーションごとに新しいクラスローダーを作成するアプリケーション コンテナを開発しました。特定のアプリケーションが呼び出されると、スレッドのコンテキスト クラスローダーがアプリケーションのクラスローダーで適切に設定されます。
ThreadLocal の使用を回避すると、クラスローダー内にプロパティを格納できますか?この場合、アプリケーション固有のプロパティをクラスローダーから直接取得できます。
たとえば、コンテキストクラスローダーにアクセスするときに、何らかの方法でプロパティを保存してから後で取得できるようにしたいと考えています。
これは可能ですか?それとも、ThreadLocal が唯一の実行可能なオプションですか?
java - ThreadLocal を介した「引数の受け渡し」は大丈夫ですか?
Java ネットワーク ライブラリとそれを利用するアプリケーションの両方を構築しています。ライブラリは次のもので構成されています。
- バイトのパケットを送受信するためのメソッドを持つインターフェース PacketSocket。
- それの 2 つの実装、1 つは TCP 経由、もう 1 つは UDP 経由です。
- PacketSocket の上に構築され、オブジェクトのバイト パケットへのシリアル化を処理する ObjectConnection クラス。
アプリケーションは、UDPPacketSocket の上で RequestConnection を使用します。UDPPacketSocket の実装は、配信を保証するかどうかをパケットごとに指定できるという点で独特です。アプリケーション内から使用できるようにしたいのですが、ObjectConnection および PacketSocket インターフェイスを経由する方法がありません。
もちろん、これらのインターフェイスの適用可能なメソッドにブール値の保証されたパラメーターを追加することもできますが、最終的には (PacketSocket の実装がさらに増えると)、特定の実装のみに固有で他の実装では無視されるパラメーターをさらに多く追加する必要があります。 .
代わりに、次のように、UDPPacketSocket の静的なスレッド ローカル プロパティを使用してそれを行うことができます。
そのようなアプローチについてどう思いますか?
.net - .NET の継承可能なスレッド ローカル
.NET 4.0ThreadLocal<T>
でクラスが導入されました。これはすばらしいことです。さて、私のアプリのユースケースには、Java のInheritableThreadLocal
クラスのようなものが必要です。.NET にそのようなものはありますか? そうでない場合、新しいスレッドはどのようにしてそのスレッド ローカル変数を親スレッドの変数で初期化できますか? 初期化ファクトリメソッドを使用する必要があると思いますが、そこに何を入れればよいかわかりません。
c# - メモリの問題と ThreadLocal
ThreadLocal<T>
implementsに気付きましたIDisposable
。これは、スレッド ローカル変数を使い終わったら破棄する必要があることを意味しています。具体的な懸念事項とは何か、何を注意し、何を避けるべきかを知りたいだけです。
スレッドが終了すると、スレッドのローカル ストレージは破棄されますか? ThreadLocal メンバーを破棄しない場合の最悪のケースは何ですか?
グローバル スレッド ローカル (矛盾した表現ですか? hehe) 変数 (またはThreadStatic
変数) があり、この値を ThreadPool 内のスレッドに割り当てるとどうなりますか。スレッドローカル値の割り当て解除に注意する必要がありますか、それとも問題ではありませんか?
java - JavaでのThreadLocal変数の共有
私の小さなアプリケーションには、基本的にライターとリーダーの2つのクラスのスレッドがあります。1つのライターに複数のリーダーを割り当てることができます。ライターは、変数に書き込むことでリーダーと対話しchunkBuffer
ます。
さて、ここでスレッドセーフの問題に頭を悩ませることはできませんchunkBuffer
。静的ThreadLocal
変数にを格納しないと、すべてのリーダーが単一のchunkBufferを共有することになります。これは悪いことです。しかし、chunkBufferを静的に格納するThreadLocal
と、ライターは別のスレッドであり、chunkBufferの独自のコピーを取得して書き込みを続けますが、書き込むデータはリーダーに到達しません。ここで何が問題なのか説明してもらえますか?どうもありがとうございます。
編集言い換えると、スレッドサブクラス(ThreadLocalなど)のすべてのインスタンスに対して一意であるが、オンデマンドで他のスレッドからアクセスできるフィールドを作成する方法はありますか?
c# - ThreadLocalプロパティ
プロパティがある場合ThreadLocal
(各スレッドには固有のプロパティがあります)、どちらが正しいか(自動セッター/ゲッターを使用したくない):
A)
B)
asp.net - ASP.NETのThreadLocalは、要求ごとの変数と同等ですか?
ThreadLocal
ASP.NETで変数を使用していますHttpHandler
。リクエストごとに新しい変数が生成されると思いました。
アプリケーションで奇妙な動作があります。ThreadLocal
変数がASP.NETページで作成および破棄されるのはいつですか?
同じスレッドが後で別の要求のためにASP.NETによって使用されるとどうなりますか?その結果、新しいThreadLocal
変数が生成されますか、それとも以前に作成された値(別のリクエストで使用された)が使用されますか?
スレッドが実際に破棄されたときに変数が破棄された場合ThreadLocal
、ASP.NETでは私の仮定は失敗します(スレッドはプールに戻り、要求ごとに一意ではないため)
java - なぜ春にカスタムスコープを使用するのでしょうか?いつ必要ですか?
誰かがカスタムスコープを理解するのを手伝ってくれませんか。私は手動と多くのオンラインの例を見て、それがどのように実装されているかを理解しました。しかし、なぜカスタムプロキシが必要なのか、そしてなぜBeanの範囲を制限するのかは、まだはっきりしていません。
シングルトンの場合、すべての参照に単一のBeanを指定する場合はシングルトンを使用し、Beanが参照されるたびに新しい参照を指定する場合はプロトタイプを使用します。
今、カスタムスコープに関する私の理解はカスタムスコープです
-私たちはカスタムスコープを2つの中間として使用します。これは、毎回単一の参照も新しい参照も渡したくないということです。しかし、それは私たちがいるシングルトンにもっと近いです。優先する場所(基になるスレッドローカルやマップなど)から、毎回同じBeanを渡します。
私のコンセプトを明確にするのを手伝ってください..ここでの主な質問は、なぜカスタムスコープなのかということです。いつ必要ですか?
java - WebApp の静的 ThreadLocal 変数 - セキュリティ/パフォーマンスの問題はありますか?
Java Web アプリケーションで ThreadLocal 変数を調査および実験しています。ThreadLocal 変数を使用して、リクエストの前に (セッションから収集された) ユーザー名を保存し、リクエストの後にそれを削除しています。これは、ServletFilter で静的ユーティリティ メソッドを呼び出すことによって行いました。セッションからユーザー名を単純に取得しない理由は、セッション タイムアウトが許容するよりも実行に時間がかかることがある長時間実行プロセスを持つシステムを継承したためです。私の考えは、リクエストが処理される前にユーザー名を取得し、それを ThreadLocal 変数に格納することです。これにより、15 分以上かかる場合でも、リクエストの期間中はユーザー名にアクセスできます。
私の質問は:
この設計にセキュリティ/パフォーマンスの問題はありますか? もしそうなら、より良い解決策は何ですか? セキュリティやパフォーマンスの問題がない場合でも、より良いアイデアを歓迎します。私のソリューションのスニペットを以下に示します。
これは、フィルタ内およびユーザー名が必要な場所で呼び出されるユーティリティ クラスです。
これは、リクエストの前にユーザー名を設定するために使用されるサーブレットフィルターです(リクエストの後にfinallyブロックを介してクリアします)。
ここに私の web.xml 構成があります:
どんなアイデアでも大歓迎です:)