問題タブ [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.
java - EJB コンテナの ThreadLocal (およびシングルトン)
現在のユーザーを表すオブジェクトに依存する認証システムを作成しました。プログラミングを簡素化し、パフォーマンスを向上させるために、ユーザーがログインした後、これらのオブジェクトを ThreadLocal に保持したいと考えています。
次のようになります。
静的要素によってクラスタリングが問題になると読んだことがあります。各クラスター ノードに UserCache がある場合、すべてのクラスター ノードには、他のノードのキャッシュ オブジェクトと同期されていない独自のキャッシュ オブジェクトがありました。右?UserCache
アプリケーションが単一のインスタンスのみを必要とするため、シングルトンの古典的な候補です。しかし、私の知る限り、@Singleton EJB はクラスター内で同じ動作をします。
では、EJB 3.1 (Java EE 6) 環境で UserCache をクラスター化可能にするにはどうすればよいでしょうか?
回答から抽出された解決策:
- CDI (JSR 299) から SessionScope を使用するか、
- Terracotta での JVM クラスタリングの使用
java - アプリケーションのすべてのスレッドが異なる休止状態セッションを使用するのはなぜですか?
休止状態を使用する Web アプリケーションがあり、何らかの理由ですべてのスレッド (httprequest またはキューイングに関連する他のスレッド) が異なるセッションを使用します。HibernateSessionFactory
次のようなクラスを実装しました。
私のテストからthreadLocal
、クラスが最初にロードされたときにメンバーが実際に1回だけ初期化されるようですJVM
が、何らかの理由で、異なるスレッドがgetSession()
異なるセッションを使用するメソッドにアクセスするときに発生します。スレッドが最初にこのクラスにアクセスする (Session) threadLocal.get();
と、null が返されますが、予想どおり、他のすべてのアクセス要求は同じセッションを生成します。threadLocal
変数が final であり、メソッドが上記のコンテキストでのみ使用されるため、これがどのように発生するかはわかりません(別の部分でthreadLocal.set(session)
遭遇したため、null 以外のセッションを生成する必要があると 99.9% 確信しています)NullPointerException
私のアプリの)。
これが関連しているかどうかはわかりませんが、これらは私のhibernate.cfg.xml
ファイルの主要部分です:
助けていただければ幸いです。もちろん、ご不明な点がございましたら、喜んでお答えいたします。イッタイ
java - Java ThreadLocal のすべての値を反復またはコピーする方法はありませんか?
環境:
私が言いたいのは、次のようなことです。
java - アプリケーション層の間で認証と承認の情報を利用できるようにする良い方法
JAVA 用の Google App Engine (GAE) で Web アプリケーションを実行しています。サーブレット レイヤーでクライアントを認証していますが、すべての関数の引数を介してクライアント オブジェクトを渡すことなく、ビジネス レイヤーとデータ レイヤーでクライアント情報を利用できるようにしたいと考えています。
ThreadLocal を使用して「セッション」タイプのオブジェクトを設定することを検討しています。そうすれば、どの関数でも次のように言うことができます:
これはこれを行う良い方法ですか、それとももっと受け入れられている解決策が他にありますか?
ありがとう!
java - 接続プーリングとスレッドごとのJDBC接続
これらのアプローチのどちらが優れていますか:接続プールまたはスレッドごとのJDBC接続?
c++ - C ++でスレッドローカルストレージを取得するさまざまな方法のパフォーマンステストを知っていますか?
スレッドローカル変数を多用するライブラリを作成しています。C++でスレッドローカル変数を取得するさまざまな方法のパフォーマンスをテストするいくつかのベンチマークを指摘できますか。
- C ++0xthread_local変数
- コンパイラ拡張(Gcc __thread、...)
- boost :: threads_specific_ptr
- pthread
- ウィンドウズ
- ..。
C ++ 0x thread_localは、それを提供するコンパイラーではるかに優れたパフォーマンスを発揮しますか?
python - C/C++ プログラムから呼び出される複数のオペレーティング システム スレッド上の複数の独立した組み込み Python インタープリター
C/C++ アプリケーションへの Python インタープリターの埋め込みについては、十分に文書化されています。C/C++ アプリケーションから呼び出される複数のオペレーティング システム スレッド (つまり、同じプロセス内の 1 つのオペレーティング システム スレッドで 1 つのインタープリター) で複数の Python インタープリターを実行するための最良の方法は何ですか? このようなアプリケーションでは、メモリの断片化やPy_Finalize() の制限に関連する問題も発生する可能性があります。
そのようなアプローチの 1 つとして、次のようなものがあります。
- Python スレッド、したがって pyconfig.h で GIL を無効にして単純化 (#undef WITH_THREAD)
- Python インタープリター ソース コードの可変グローバル変数はすべて、スレッド ローカル ストレージを介して参照されるヒープ割り当て構造体に移動されました (参照: Python on a Phone )。
私の質問は次のとおりです。
- より良いアプローチはありますか?
- Python インタープリター ソース コードのグローバル変数を、TLS (スレッド ローカル ストレージ) 経由で参照されるヒープ割り当て構造体に自動変換できるツールはありますか?
同様のトピックがここで議論されています:
java - Google App Engine(GAE)のThreadLocal
AppEngineアプリケーションでリクエスト全体のデータを利用できるようにしたいと思います。
例:
- リクエストが行われたURL。
- 認証情報。
これThreadLocal
はGAEのJREホワイトリストに含まれているようです。
ThreadLocal
この情報を利用できるようにするための良い安全な方法はありますか?代替/より良い/より受け入れられた方法はありますか?
python - Djangoでスレッドローカルを使用するのはなぜ悪いのですか?
スレッドローカルを使用して、現在のユーザーとリクエストオブジェクトを保存しています。このようにして、プログラムのどこからでも(動的フォームなど)リクエストに簡単にアクセスできます。リクエストを渡す必要はありません。
ミドルウェアにスレッドローカルストレージを実装するために、Djangoサイトのチュートリアルに従いました: https ://web.archive.org/web/20091128195932/http://code.djangoproject.com:80 / wiki / CookBookThreadlocalsAndUser
その後、このドキュメントは、この手法を回避することを提案するように変更されました: https ://web.archive.org/web/20110504132459/http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
記事から:
設計の観点から、スレッドローカルは本質的にグローバル変数であり、グローバル変数が通常伴う移植性と予測可能性のすべての通常の問題の影響を受けます。
さらに重要なことに、セキュリティの観点から、スレッドローカルは大きなリスクをもたらします。他のスレッドの状態を公開するデータストアを提供することにより、Webサーバー内の1つのスレッドが、システム内の別のスレッドの状態を変更する可能性がある方法を提供します。スレッドローカルデータにユーザーの説明やその他の認証関連データが含まれている場合、そのデータは、許可されていないユーザーへのアクセスを許可したり、ユーザーの個人情報を公開したりする攻撃の基礎として使用される可能性があります。この種の攻撃から安全なスレッドローカルシステムを構築することは可能ですが、防御的であり、そもそもそのような脆弱性の影響を受けないシステムを構築する方がはるかに簡単です。
グローバル変数が悪い理由は理解できますが、この場合、自分のサーバーで自分のコードを実行しているため、2つのグローバル変数がどのような危険をもたらすのかわかりません。
誰かが関連するセキュリティの問題を説明できますか?この記事を読んで、私がスレッドローカルを使用していることを知っている場合、多くの人に私のアプリケーションをハッキングする方法を尋ねましたが、誰も私に言うことができませんでした。私は、これがオブジェクトを明示的に渡すことを愛する髪を分割する純粋主義者によって保持された意見であると疑うようになり始めています。