問題タブ [nonblocking]

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 投票する
2 に答える
2368 参照

dialog - Applescript のノンブロッキング ダイアログ ボックス

アプリケーションのパッチをデプロイするには、小さなスクリプトを作成する必要があります。パッチは、アプリケーション内のいくつかのファイルを置き換えます。私は、Applescript を使用してパッチをデプロイすることにしました。コピーするファイルが非常に大きく、ファイルがコピーされるまでに時間がかかります。スクリプトの実行をブロックしないダイアログ ボックスを取得して、パッチの適用中に Updating.. などのメッセージを表示し、病棟後にダイアログ ボックスを閉じる方法があるかどうかを知りたかったのです。 .

ありがとうシヴァプラサド

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

perl - PerlでのノンブロッキングI/O操作は1つのスレッドに制限されていますか?良いデザイン?

を介して同期的にポーリングされる多数のクライアントおよびサーバーソケット(サーバーサービス、および管理対象コンポーネントに接続して永続化するクライアント)を含むサービスを開発しようとしていますIO::Select。アイデアは、ワーカースレッドのプールを通じて発生するI/Oおよび/または要求処理のニーズを処理することでした。

Perl()のsharedスレッド間でデータを共有可能にするキーワードにはthreads::shared制限があります。ハンドル参照は、共有できるプリミティブの中にはありません。

ハンドルやハンドル参照を共有できないことを理解する前にselect()、ポーリングを処理するスレッドを作成し、関連するハンドルをThreadQueueスレッドプール全体に分散させて、実際に読み取りと書き込みを行う計画でした。 。(もちろん、によって使用される実際の記述子セットへの変更selectがスレッドセーフであり、1つのスレッドでのみ行われるようにこれを設計していました-実行されるのと同じスレッドであるselect()ため、実行中は明らかになりません。)

ハンドル自体を共有できないため、これは今は発生しないようです。したがって、ポーリングと読み取りおよび書き込みはすべて1つのスレッドから実行する必要があります。これに対する回避策はありますか?スレッド間での実際のシステムコールの分解について言及しています。明らかに、キューとバッファを使用して、データを他のスレッドで生成し、実際に他のスレッドに送信する方法があります。

この状況から発生する問題の1つはselect()、タイムアウトを指定する必要があることです。タイムアウトは、かなり大きな記述子のセットのポーリングで問題が発生しないように十分に高く、タイミングに過度の遅延が発生しないように十分に低くなると予想されます。イベントループ-ただし、ポーリングプロセスで実際のI / Oセットメンバーシップが検出された場合、select()早期に戻るため、問題が部分的に軽減されることは理解しています。別のスレッドからウェイクselect()アップする方法が欲しいのですが、ハンドルを共有できないため、その方法を簡単に考えることも、そうすることの価値を理解することもできません。select()とにかく目を覚ますのが適切なとき、他のスレッドは何を知るつもりですか?

回避策がない場合、Perlでのこのタイプのサービスの適切なデザインパターンは何ですか?かなり高いスケーラビリティと同時I/Oが必要です。そのため、多くの人がより高いレベルを使用しているように、リスニングソケットやクライアントおよび/またはサーバープロセスごとにスレッドを生成するだけでなく、ノンブロッキングルートを使用しました。最近のレベル言語は、ソケットを扱うときに行うことはありません。これは、Javaの世界では一種の標準的な慣習のようでありjava.nio.*、システム指向プログラミングの狭い領域の外では誰も気にしないようです。多分それは私の印象です。とにかく、そんな風にはしたくない。

では、経験豊富なPerlシステムプログラマーの観点から、このようなものをどのように編成する必要がありますか?モノリシックI/Oスレッド+純粋なワーカー(非I / O)スレッド+多数のキュー?ある種の巧妙なハック?私がすでに列挙したものを超えて注意すべきスレッドセーフの落とし穴はありますか?より良い方法はありますか?私はこの種のプログラムをCで設計した豊富な経験がありますが、Perlのイディオムや実行時の特性は持っていません。

編集:PSおそらく、これらのパフォーマンス要件を備えたプログラムとこの設計は、Perlで記述されるべきではないことに気づきました。しかし、Perlで作成された非常に洗練されたサービスが非常にたくさんあるので、それについてはよくわかりません。

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

.net - C#の単純なスレッドセーフなノンブロッキングファイルロガークラス

いくつかの情報をファイルに記録する Web アプリケーションがあります。C# で単純なスレッド セーフなノンブロッキング ファイル ロガー クラスを探しています。スレッドの経験はほとんどありません。log4Net、Enterprise Library Logging Block、ELMAH などの優れたロギング コンポーネントがあることは知っていましたが、アプリケーションを外部に依存させたくありません。このキューの実装を使用することを考えていましたhttp://www.codeproject.com/KB/cpp/lockfreeq.aspx

0 投票する
5 に答える
2190 参照

synchronization - ロックレスとノンブロッキングの違いは何ですか?

データ構造の同期のコンテキストで、誰かが「ロックレス」と「ノンブロッキング」の違いを明確にできますか? これらの用語は、多くの人が同じ意味で使用しているように見えますが、どこかに隠されている微妙な違いがないかどうかはまだわかりません.

つまり、ロックレスは「ロックなし」であり、ノンブロッキングは進行を保証するようなものです。一方が他方を暗示していると思われますが、その逆ではありません。よくわかりません。

参照歓迎。

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

python - ノンブロッキング ソケット connect() を取得するにはどうすればよいですか?

ここには非常に単純な問題があります。同時に多くのホストと通信する必要がありますが、各リクエストはかなり自己完結型であるため、同期は必要ありません。

そのため、スレッドをスパムするのではなく、非同期ソケットを使用することにしました。今、私は少し問題があります:

非同期のものは魅力のように機能しますが、100 のホストに接続し、100 のタイムアウト (タイムアウト = 10 秒) を取得すると、すべての接続が失敗したことを確認するためだけに 1000 秒待機します。

非ブロッキングソケット接続も取得する方法はありますか? ソケットはすでに nonBlocking に設定されていますが、connect() の呼び出しはまだブロックされています。

タイムアウトを減らすことは、受け入れられる解決策ではありません。

私はこれを Python で行っていますが、この場合、プログラミング言語はあまり重要ではないと思います。

本当にスレッドを使用する必要がありますか?

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

javascript - サムネイルの読み込み中にフィードバックを提供し、読み込み順序を制御する方法

私は、1ページに約250〜300のサムネイルがあり、それぞれが水平方向にスクロールできる5つの異なるdivに含まれているWebサイトを構築しています。
ただし、読み込み段階では、サムネイルをクリックして、ライトボックスにフル解像度の画像を読み込むことができる必要があります。

プリローダーと複数の画像で読み込みステータスを表示する方法のJasonBuntingsの回答を見てきました。IEでは機能しますが、すべてのサムネイルが読み込まれるまでライトボックス画像が読み込まれないFFでは機能しません。

そこで、同じ概念に基づいて独自のコードを作成しました。これは機能しますが、不安定で(ランダムにハングし)、大量のメモリを使用します。

ConnectionManagerは次のようになります。

これは基本的に健全な概念ですか、それとも私は道を外れていますか?これを行うためのより良い/より簡単な方法を知っていますか?

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

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

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

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

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

c - ノンブロッキング stdio

私は、コンソールからユーザー入力を取り込み、別のスレッドで出力するプログラムに取り組んでいます。ユーザーが何かを入力している途中で、printf が表示されてカーソル位置に表示されるような状況は避けたいと思います。

コンソール ウィンドウから c で非ブロック io を実行する方法はありますか? 理想的には、ユーザーが入力したものが画面に表示されないように、キープレスなどをキャプチャします。私は Ubuntu で開発を行っていますが、ncurses などを使用する必要がなければ最高です。

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

c# - DataGridView へのノンブロッキング更新

デリゲートを使用してメイン コントロール スレッドのコントロールを更新する方法を理解しています。ここでの問題は、バウンドに大量のDataSetアイテム (たとえば 2000 アイテム) を追加する場合DataGridView、グリッドにデータが入力されるまでに 5 ~ 8 秒かかり、その間、GUI 全体がロックされることです。DataGridViewユーザー インターフェイスをロックしないように更新するにはどうすればよいですか?

明確にするために、問題は、私がデータベースに対して遅いクエリを実行していて、UI がそれをブロックしていることではありません。私は既に を持っていて、DataSet object[]オブジェクトの配列を にBindingList<object>バインドDataGridしています。

を実行するデリゲートを作成するなど、さまざまなことを試しましたが(機能しないことはわかっていましたが、表示されると思いました)dataProvider.Add()、制御スレッドで発生する必要があったため、それは問題ではありませんでした。

BindingListいくつかの良い提案は、最初にビルドしてからgridView.DataSource. これは機能しますが (グリッドを即座に更新します)、さらにデータを追加する唯一の方法は、別の新しいを作成BindingListし、gridView.DataSource.copyTo()(既存のデータを取得するために) を実行し、その上に新しいデータを追加してから、をに設定するgridView.DataSourceことです新しいBindingList。リスト内のオブジェクトは静的ではないため、これは機能しません。各オブジェクトはサーバーに非同期でデータをアップロードしており、それらを新しいオブジェクトにコピーするBindingListと問題が発生します。

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

java - Java: SelectionKey.attach() は壊れていますか?

Java NIO の私の実装では、SelectionKey.attach() を機能させることができませんでした。基本的に、クライアントが接続したら (OP_ACCEPT 関心操作)、クライアントの IP アドレスがクライアントの状態を維持するオブジェクトにマップされるマップに追加します。次に、OP_READ が発生すると、クライアントの IP アドレスを再度取得し、今度はマップから値を取得して、クライアントの状態オブジェクトを取得します。

ここでの問題は、データがネットワークから読み取られるたびにマップ ルックアップを実行する必要があることです。そこには無駄な作業がたくさんあります。そのため、別のイベントを処理している場合でも (OP_READ 中に取得するのではなく、 OP_ACCEPT 中にマップします)。

問題は、それが機能しないことです。添付ファイルを取得すると、常に null になります。そして、attach() を介して添付ファイルをセットアップし、すぐに attachment() を呼び出すと、機能します。どういうわけか、異なるイベントの間に、それはその関連付けを失います。

申し訳ありませんが、私のコードをここに投稿するには少し長くなりますが、このスレッドのコメントを見ると: リンク テキスト ...基本的に同じ結論に達している他の人もいることがわかります: attach() とattachment() は機能しません。

それを機能させるためのトリックはありますか、または処理する新しい読み取りイベントがあるたびにマップで手動でルックアップを行うために必要な邪悪なオーバーヘッドに悩まされていますか?

最後に、attach() と attachment() を適切に処理する新しいサブクラスに SelectionKey を「ラップ」する方法はありますか?

ありがとう!