問題タブ [blocking]
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.
php - ブロックせずに PHP セマフォをクエリしますか?
sem_acquire 関数のように実際にブロックせずに、sem_get で作成されたセマフォを照会することは可能ですか?
乾杯、ダン。
vb.net - なぜこれがブロックされているのですか?(イベントとデリゲートを使用した VB.NET マルチスレッド)
ボタンをクリックして「再試行」と言う前に、dllのクラスがユーザーにプリンターの障害をクリアするように求めるフォームを表示する機能があります。ユーザーは障害をクリアすることを気にせずに再試行を押しただけなので、インターロックをコーディングしています。呼び出されたフォームのボタンは、フォームの「有効化」メソッドが呼び出されるまで無効になります。
これらの変更をトリガーするイベントは、異なるスレッドで実行されている他の dll から発生するため、これはデリゲート呼び出しで行われます。
フォームの 'enable' メソッドは、別のスレッド (イーサネット IO サーバーを監視するスレッド) からのイベントを処理する EVENT HANDLER に接続されています。
私が抱えている問題は、「_Fault_StateChanged」イベントが決して発生しないことです。原因は、ここで使用した "ShowDialog" および "DialogResult" 手法にあると思われましたが、このアプリケーションの他の場所でもまったく同じ手法を使用しました。
どんな提案も素晴らしいでしょう
以下のコードの抜粋を参照してください。
主なクラスの抜粋
再試行フォーム クラスの抜粋
ダニエルのコメントに対する追加の詳細
ここのコードは不完全です。抜粋です。fault オブジェクトは、外部ライブラリへのサブスクリプションであり、イーサネット IO サーバーのハンドラーです。IOServer のデジタル入力が変化すると、_fault StateChanged イベントが発生します。私は次のことを知っています: 私のトレース ファイルは、信号の変化が高いことを示しています。これにより、再試行フォームが呼び出されます。再試行画面がまだ表示されている場合、信号は物理的に再び低くなります。...しかし、イベントは発生しません
ShowDialog/DialogResult が完了するまで、アプリケーションが入ってくるイベントを処理できないかのようですが、.NET 2.0 の ShowDialog がブロックされなかったことを理解していたため、これについて混乱しています。アプリの他の場所でも同じパターンです。
注意すべき点がいくつかあります: MAIN CLASS は、構成に基づくリフレクションを介して実行時に動的にインスタンス化されます。これはVS2005 SP2です
これが役立つ場合は、クラス全体を別のコード ボックスに投稿しますが、シーンが混雑する可能性があります...
ありがとうアンディ
python - マルチスレッドPythonアプリケーションは、スレッドの実行中にハングします
DBusサービスとして利用できるMainObjectを作成しようとしています。このMainObjectは、他のオブジェクト/プロセスに常に応答し、アイテムを処理している間もこの非ブロッキングを維持する必要があります。そのため、アイテムは別のスレッドで次々に処理されます(キュースタイル)。DBusまたはコマンドラインを介してMainObjectにアイテムを追加できます。問題を示すために、サンプルを簡略化しました(dbusもコマンドラインもありません)。
私の問題は、「tt.join()」を再度有効にすると、アプリケーションは期待どおりに機能しますが、他のプロセスをブロックしていることです。当然のことながら、tt.joinは、別のスレッドが作業を終了するまでアプリケーションを待機させます。一方、「tt.join()」が無効のままの場合、アプリケーションは外部のdbusイベントをブロックしませんが、「ThreadTestdone!」には到達しません。(実際の出力を見てください)
私が欲しいのは、期待される出力ですが、アプリケーションは応答性を維持する必要があります。
期待される出力:
実際の出力:
java - 効率的なブロッキング クエリに関するアドバイス
タプル オブジェクトを並行 Java コレクションに格納し、パターンに一致する最初の要素を返す効率的なブロッキング クエリ メソッドを使用したいと考えています。そのような要素が利用できない場合、そのような要素が存在するまでブロックされます。
たとえば、クラスがある場合:
そして、次のようなコレクション:
次のようにクエリしたいと思います。
second
これは、フィールドが「foo」に等しい最初の使用可能なペアを返すか、そのような要素が追加されるまでブロックします。別のクエリの例:
値に関係なく、最初に使用可能なペアを返す必要があります。
ソリューションは既に存在しますか? そうでない場合、メソッドを実装するために何を提案しますget( Pair p )
か?
明確化:メソッドget( Pair p)
は要素も削除する必要があります。名前の選択はあまり賢明ではありませんでした。より適切な名前はtake( ... )
.
c - selectを使用して同じソケット(TCP)に対して読み取りと書き込みを行う
私たちは、非常に単純なネットワーク通信を行うためのクライアントとサーバーを作成しています(私が思っていたのは)。複数のクライアントがサーバーに接続し、サーバーは他のすべてのクライアントにデータを送り返すことになっています。
select
サーバーは、トラフィックを待機するブロッキングループ内にあり、トラフィックが発生すると、他のクライアントにデータを送信します。これは問題なく機能するようです。
問題はクライアントです。読み取りに応答して、書き込みを実行したい場合があります。
ただし、次を使用すると、次のことがわかりました。
読み取る新しいデータができるまで、コードはブロックされます。ただし、(非同期で、別のスレッドから)ネットワーク通信スレッドに書き込む新しいデータがある場合があります。したがって、selectを定期的にウェイクアップして、次のように書き込むデータがあるかどうかを確認させます。
選択をポーリングモード(または途方もなく短いタイムアウト)に設定してみました:
しかし、その場合、クライアントは受信データを取得しないことがわかりました。
また、次のように、ソケットfdを非ブロッキングに設定してみました。
しかし、それは問題を解決しません:
- クライアントにデータ
select()
がない場合、struct timeval
データの読み取りは機能しますが、ブロックを解除して書き込み可能なデータを検索できるようにすることはありません。 - クライアント
select()
がtimeval
ポーリングを取得する必要がある場合、読み取るデータが着信していることを通知することはなく、ネットワーク接続が確立されていないとアプリがフリーズします(他のすべての関数呼び出しが成功したにもかかわらず)
私が間違っている可能性があることについてのポインタはありますか?同じソケットで読み取り/書き込みを行うことはできませんか(それが真実であるとは信じられません)。
(編集:正解、およびサーバーでは覚えているがクライアントでは覚えていないことは、2番目のfd_setを用意し、select()を呼び出す前にmaster_listをコピーすることです。
)。
c++ - ブロックされた通話から戻る方法は?
スレッドを強制的に呼び出しから、ストリームからのブロッキング読み取りなどのブロッキング関数に戻すことは可能ですか?
例えば...
java - ガベージ コレクションとスレッド
私の知る限り、GCがそのことを行っているとき、VMは実行中のすべてのスレッドをブロックします-または少なくともヒープを圧縮しているとき。これは、CLR と JVM の最新の実装(2010 年 1 月現在の製品バージョン) に当てはまりますか? 私は初歩的な仕組みを理解しているので、GC の基本的なリンクを提供しないでください。
コンパクションが発生すると参照が移動期間中に無効になる可能性があるため、グローバル ロックが該当すると思います。ヒープ全体をロックする (つまり、すべてのスレッドを間接的にブロックする) のが最も簡単なようです。より堅牢なメカニズムを想像することはできますが、多くの場合、KISS が優勢です。
私が間違っていれば、ブロックを最小限に抑えるために使用される戦略の簡単な説明によって私の質問に答えることができます. 私の推測が正しければ、次の 2 つの質問について洞察を提供してください。
これが実際に動作する場合、JBOSS や Glassfish などの重量級のエンタープライズ エンジンはどのようにして一貫して高い TPS レートを維持するのでしょうか? 私は JBOSS でいくつかのグーグル検索を行い、Web 処理に適したメモリ アロケータのような APACHE で何かを見つけることを期待していました。
NUMA 風のアーキテクチャ (おそらく近い将来) に直面すると、プロセスがスレッドとメモリ割り当てによってバインドされた CPU でない限り、これは惨事のように思えます。
winforms - ベストプラクティス:Asyncメソッドの待機中に実行をブロックする
既存のプログラム(内部で作成されたもの)を、元のプログラムとは異なるライブラリを使用するように適合させようとしています。ライブラリ固有のコードのほとんどを抽象化しました(簡単な部分のようです)。
問題は、古いライブラリがブロッキングメソッドを使用して呼び出しを実行し、内部プログラムがブロッキングメソッドが呼び出されることを期待しているのに、新しいライブラリが非同期メソッドを使用することです。
非同期操作が完了するのを待つためのベストプラクティスは何でしょうか。私の最初の考えは、completedというブールフラグを設定し、completed==trueになるまでwhileループでスピンすることでした。
これは、私が利害関係者のためにまとめようとしている概念実証のためのものであり、利害関係者がプロジェクトを承認した場合は、プログラムの問題のある部分を書き直します。しかし、当分の間、非同期呼び出しが完了するまで、関数が非同期メソッドを呼び出すブロックを待つ必要があります
php - アップロードフォルダーでphpスクリプトをブロックすることは可能ですか?
画像をアップロードできるphpで最初のフォームを経験しています。
危険な可能性があると説明している Web 上の記事を見たことがありますが、指定したフォルダーのスクリプトをブロックする方法はありますか? .htaccess
またはphp.ini
命令で何か?
c++ - winsock ブロッキング呼び出しを中止するには?
C++ で Winsock 2 を使用していますが、サーバーがクライアント接続からの読み取りを停止する方法を考えています。読み取りスレッドがブロックされrecv()
、中止する方法がわかりません。これを行う 1 つの方法は、 でノンブロッキング ソケットを使用することですselect()
が、このスレッドは新しい をチェックする前に待機する必要がありselect()
ます。
ソケットの読み取りを停止する適切な方法は何ですか?