問題タブ [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.

0 投票する
4 に答える
1650 参照

networking - JavaネットワークI/Oブロッキングかどうか?

うまくいけば、これはJavaのBufferedOutputStreamsとDataOutputStreamsに関するすばやく簡単な質問です。

次のように出力ストリームにバイトを書き込むとき

これらのメソッドはそれらを即座にストリームに書き込んで戻りますか、それともブロックしますか?

コアJavaドキュメントには何も表示されませんでしたが、書き込みがブロックされないため、おそらく私の質問は意味がありませんか?

誰かが私をまっすぐにしてください。

ありがとう、jbu

0 投票する
7 に答える
7904 参照

c++ - C++ - Sleep() と cin はどのように機能しますか?

ちょっと興味があるんだけど。関数 Sleep() は実際にどのように機能しますか (windows.h で宣言されています)。たぶんその実装だけでなく、誰でも。つまり、どのように実装されていますか? 特定の時間コードを「停止」させるにはどうすればよいですか? cin >> とそれらが実際にどのように機能するかについても興味があります。彼らは正確に何をしますか?

何かを実行し続けることを「ブロック」する方法を私が知っている唯一の方法は、while ループを使用することですが、stdin から読み取るメソッドを呼び出しているときに起こっていることと比較して、膨大な量の処理能力が必要であることを考慮してください (単純に比較してください)。しばらく (true) stdin からの読み取りまで)、それは彼らがしていることではないと思います。

0 投票する
2 に答える
524 参照

java - java送信スレッドの実行方法

出力ストリーム (私の場合は tcp/ip を使用しています) 経由で送信されるデータはブロックされる可能性があると言われました。その場合、データが送信されるのを待たなければならないことでアプリケーションを停止したくありません。

これを行う方法のモデルが必要です。

このストリームを介してメッセージ オブジェクトを送信する必要があります。

これらのメッセージ オブジェクトを含むブロッキング キューが必要だと考えています。スレッドの run() メソッドは、利用可能なすべてのメッセージ オブジェクトを取得して送信します (true の場合)。

私の質問は

  1. while true ループよりも良い方法はありますか? おそらく while true ループで、送信するメッセージがない場合、スレッドに譲歩/スリープを指示できます。

  2. 使用するより良いモデルはありますか?私のコードに while(true) があると、メッセージを待っているプロセッササイクルを消費するのではないかと心配しています。

どなたか経験のある方、良い方法があれば教えてください。

ありがとう、ジブ

0 投票する
1 に答える
2101 参照

c# - ワーカーによってブロッキング キューが空になるのを待つ方法

ブロッキング キューを備えた単一のプロデューサー/単一の消費者モデルを使用しています。プロデューサーが生産を終了したら、キューが空になるのを待ってから戻るようにしたいと思います。

ここで Marc Gravellが提案した BlockingQueue を実装しました。

私のモデルでは、プロデューサー (レンダラー) はイベントを使用して、ファイルがレンダリングされているとき (ワーカーがアイテムをキューに入れているとき)、およびすべてのファイルがレンダリングされたとき (終了したとき) にワーカー (プリンター) に通知します。

現在、レンダラーが完了すると、メソッドが終了し、ワーカーが強制終了されるため、印刷されていないレンダリング ファイルが 10 ~ 15 個残っています。

キューが空になるまで、たとえばすべてのファイルが印刷されるまで、終了イベント ハンドラをブロックしたいと考えています。キューが空になるまでブロックする「WaitToClose()」メソッドのようなものを追加したいと思います。

(違いを生むためにワーカースレッドを設定しIsBackground = trueますか?)

0 投票する
3 に答える
11337 参照

sql - SQL Server ALTER フィールド NOT NULL に永遠に時間がかかる

約 400 万件のレコードを持つテーブルからフィールドを変更したいと考えています。これらのフィールドの値がすべて NOT NULL であることを確認し、このフィールドを NOT NULL に変更したい

... この更新を行うには永遠にかかるようです。それをスピードアップする方法はありますか、それとも営業時間外に一晩中やっているだけですか?

また、これによりテーブルロックが発生する可能性がありますか?

0 投票する
6 に答える
36447 参照

java - Java の並行キューとブロッキング キュー

スレッドがイベントを 2 番目のスレッドの着信キューにプッシュするという古典的な問題があります。今回だけは、パフォーマンスにとても興味があります。私が達成したいことは次のとおりです。

  • キュー、プロデューサーのプッシュ、レシーバーのポップへの同時アクセスが必要です。
  • キューが空の場合、コンシューマーがプロデューサーを待ってキューにブロックするようにします。

最初のアイデアは a を使用することでしたがLinkedBlockingQueue、すぐにそれが同時実行ではなく、パフォーマンスが低下することに気付きました。一方、私は現在 a を使用していますConcurrentLinkedQueueが、それでも各出版物にwait()/のコストを支払っています。notify()コンシューマーは、空のキューを見つけてもブロックしないため、同期wait()してロックする必要があります。一方、プロデューサーは、notify()すべてのパブリケーションでそのロックを取得する必要があります。sycnhronized (lock) {lock.notify()}全体的な結果として、必要がない場合でも、すべての出版物のコストを私が支払って います。

ここで必要だと思うのは、ブロックと並行の両方のキューです。プッシュされた要素がリストの最初にある場合、オブジェクトに余分なものを付けて、のpush()ように機能する操作を想像します。プッシュには次の要素との接続が必要なため、このようなチェックは既に に存在すると考えています。したがって、これは外部ロックで毎回同期するよりもはるかに高速です。ConcurrentLinkedQueuenotify()ConcurrentLinkedQueue

このようなものは利用可能/合理的ですか?

0 投票する
2 に答える
51590 参照

events - ブロッキングIOと非ブロッキングIO。良い記事を探しています

昔々、私はIndyの紹介の記事に出くわし、それ以来、ブロッキングと非ブロッキングのIOについて考えるのをやめられません。

ブロッキングIOと非ブロッキングIOの長所と短所、およびそれぞれの場合に自然で理解しやすく、保守しやすいコードを取得するためにアプリケーションを設計する方法を説明するいくつかの優れた記事を探しています。
大きな絵を理解したい...

0 投票する
2 に答える
814 参照

scala - アクター内からブロッキング アクターを呼び出す

Actor内部から反応を呼び出すと、これは呼び出しをブロックしますか、Actorそれとも他のリクエストを処理していますか?

0 投票する
2 に答える
4472 参照

c++ - MessageBox()/related が同期の場合、メッセージ ループがフリーズしないのはなぜですか?

MessageBox()メッセージ ループ内のように一見同期の Windows 関数を呼び出すと、Sleep()代わりに (または同様の関数) を呼び出したかのようにループ自体がフリーズしないのはなぜですか? 私の要点を説明するために、次のスケルトンを取り上げますWndProc

上記の例では、プログラムの主な機能はタイマーを実行し、カウンターの値を毎秒表示することです。ただし、ユーザーがウィンドウをクリックすると、プログラムはメッセージ ボックスを表示し、ボックスが閉じられた後にビープ音を鳴らします。

ここが興味深いところです。メッセージ ボックスが閉じられるまで実行されないMessageBox()ため、 が同期関数であることがわかります。MessageBeep()ただし、タイマーは実行され続け、メッセージ ボックスが表示されている間でもウィンドウは 1 秒ごとに再描画されます。そのため、MessageBox()明らかにブロッキング関数呼び出しですが、他のメッセージ ( WM_TIMER/ WM_PAINT) は引き続き処理できます。MessageBox を次のような別のブロッキング呼び出しに置き換える場合を除いて、それは問題ありませんSleep()

これにより、アプリケーションが完全にブロックされ、メッセージ処理が 10 秒間行われません ( WM_TIMER/WM_PAINTが処理されない、カウンターが更新されない、プログラムが「フリーズ」するなど)。MessageBox()では、メッセージ処理を続行できるのに、そうでないのはなぜSleep()でしょうか? 私のアプリケーションがシングル スレッドであることを考えると、MessageBox()この機能を可能にするのは何ですか? システムはアプリケーション スレッドを「複製」して、WM_LBUTTONDOWN一度コードを終了できるMessageBox()ようにしながら、その間に元のスレッドが他のメッセージを処理できるようにしますか? (それは私の根拠のない推測でした)

前もって感謝します

0 投票する
2 に答える
15205 参照

c++ - QTextStream を使用して標準入力をブロックしない方法で読み取る

Qt を使用して、stdin ストリームの内容をノンブロッキングで読み取ろうとしています。QSocketNotifier を使用して、ソケットが新しいデータを受信したときに警告します。通知機能のセットアップは次のようになります。

スロットは次のonData()ようになります。

ご覧のとおり、select() システム コールを使用して、読み取るデータがなくなったことを知らせようとしています。ただし、実際には、テキストの最初の行を読んだ後に select() 呼び出しが 0 を返します。したがって、たとえば、プロセスの stdin ストリームに 5 行のテキストを書き込むと、最初の行しか読み取れません。

何が問題なのですか?