問題タブ [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.
c - EAGAINの後に読み取りを強制的にブロックしますか?
読み取り用に開いているファイル記述子がありますが、これは非ブロッキングである可能性があります。私がする必要があるのは、EOFに達するまですべてのデータを読み取り、そのデータを書き込み可能なファイル記述子に書き込むことです。このコピーを実行するプロセスは、周囲で何が起こっているかを「認識」していないため、データを待っている間は何か便利なことができるとは思いません。また、while
ループを使用したくerrno
ありません( EAGAIN
)無駄だと思うので。データが利用可能になるまで、コピープロセスの実行をブロックまたは一時停止する方法はありますか?
c - O_NONBLOCK は、ファイル記述子または基になるファイルのプロパティに設定されていますか?
fcntl
、open
、read
、およびの The Open Group Web サイトで読んだことから、 がファイル記述子に設定されているかどうか、したがって、非ブロッキング I/O が記述子で使用されているかどうかは、 のプロパティである必要があるというwrite
印象を受けました。O_NONBLOCK
基になるファイルではなく、そのファイル記述子。ファイル記述子のプロパティであるということは、たとえば、ファイル記述子を複製するか、同じファイルに対して別の記述子を開く場合、一方にはブロッキング I/O を使用し、もう一方には非ブロッキング I/O を使用できることを意味します。
ただし、FIFO を試してみると、FIFO に対してブロッキング I/O 記述子と非ブロッキング I/O 記述子を同時に持つことはできないようです (したがって、O_NONBLOCK
設定されているかどうかは、基になるファイル [FIFO] のプロパティです)。 ):
これは私に考えさせます:ノンブロッキングI/O記述子とブロッキングI/O記述子を同じファイルに持つことは可能ですか?もしそうなら、それはファイルのタイプ(通常のファイル、FIFO、ブロック特殊ファイル)に依存しますか? 、キャラクタースペシャルファイル、ソケットなど)?
java - あるスレッドから別のスレッドに単純なJavaオブジェクトを渡す高速な方法
オブジェクトを受け取るコールバックがあります。このオブジェクトのコピーを作成し、さらに処理するために別のスレッドに渡す必要があります。コールバックができるだけ早く戻ることが非常に重要です。理想的には、コールバックはコピーをある種のロックフリーコンテナに書き込みます。
コールバックは、単一のスレッドと1つの処理スレッドからのみ呼び出されます。
たくさんのdoubleを他のスレッドに渡すだけでよく、doubleの最大数(約40)がわかります。
何か案は?私はJavaにあまり詳しくないので、スレッド間でデータを渡す通常の方法がわかりません。
twisted - Ruby EventMachine、Python Twisted、または JavaScript Node.js のポイント/目的は何ですか?
これらのフレームワークが解決する問題がわかりません。それらは、Apache HTTPD、Tomcat、Mongrel などの HTTP サーバーの代替品ですか? それとももっとですか?なぜそれらを使用する必要があるのでしょうか...実世界の例をいくつか教えてください。チャット ルームやブロードキャスト サービスの例を数え切れないほど見てきましたが、これが、たとえば Java プログラムを設定してソケットを開き、リクエストごとにスレッドをディスパッチする場合とどう違うのかわかりません。
ノンブロッキング I/O については理解できたと思いますが、それがマルチスレッド Web サーバーとどのように違うのかわかりません。Node.jsの場合、スレッドは1つしかなく、複数のスレッドをジャグリングするよりも効率的かもしれないと読みましたが、これらのフレームワークと従来のWebサーバーの唯一の違いは何ですか?
linux - MSG_NONBLOCK および MSG_WAITALL を使用した recv
recv
ノンブロッキング フラグ MSG_NONBLOCK を指定して syscallを使用したいと考えています。ただし、このフラグを使用すると、要求全体が満たされる前に syscall が戻る可能性があります。そう、
- MSG_WAITALL フラグを追加できますか? ノンブロッキングになりますか?
- または、ブロッキング recv を非ブロッキング recv でループに書き直すにはどうすればよいですか
qt4 - PyQt ブロッキング バージョンの show()
私はかなり CPU を集中的に使用するアプリケーションを持っていますが、CPU を集中的に使用するものはすべて QPushButton をクリックすることによって開始されます。ボタンをクリックすると、非表示の QLabel が show()n になります。
どうやら、show() はノンブロッキングです。残念ながら、これは、ラベル show() が表示される前に、CPU を集中的に使用する作業が実質的に半分完了していることを意味します。
番組をブロックするにはどうすればよいですか? または、ボタンをクリックしたときにラベル show() を正しくするにはどうすればよいですか?
関連コード:
parse_triggered により、親クラスは parse() 関数を呼び出しますが、これはかなり CPU を集中的に使用します。
java - Java / Groovy Socket - 非ブロッキング方法で閉じられているソケットの検出
要件に合わせて、必要に応じてリクエスト/ヘッダーを書き換えることができる小さな HTTP プロキシを作成しようとしています。すでに存在する場合は、それを教えてください。さもないと...
私はほぼ機能するものを書きました。プロキシ機能は実行できますが、書き換えは (まだ) 実行できません。問題は、ブロッキング読み取りを行わないと、リモート ソケットがいつ閉じられたかを検出できないことです。ブロックせずに閉じられているソケットを検出できることは、この機能にとって重要です。私はJava APIのドキュメントを調べましたが、それが可能であるという兆候さえ見つかりません。ここに私が持っているものがあります:
ソケットが閉じられているかどうかのテストは、ソケットが閉じられたことを示すことはありません。そして、前述したように、ブロッキング読み取りを行わずにストリームの「END OF FILE」条件を検出する方法の例を見つけることができません。
方法がなければなりません。ここにいる誰かがそれが何であるか知っていますか?
c# - 名前付きパイプ(c#)で非待機書き込みを行う方法は?
私は.net3.5名前付きパイプを使用しており、サーバー側は次のとおりです。
たとえば、BinaryWriterを使用してデータを書き込むと、クライアント側がNamedPipeClientStreamでread()を呼び出すまで、write()呼び出し自体は返されません。
BinaryWriterは:
NamedPipeServerStreamがBeginRead/BeginWriteを提供していることは知っていますが、私が収集したものから、名前付きパイプを使用すると、ストリームライターがそれらの上で実行できるようになります(Microsoftが提供する多くの例に見られます)。
では、名前付きパイプへのwrite()を非待機にするにはどうすればよいですか?
助けてくれてありがとう。
c++ - ノンブロッキングTCPバッファの問題
私は問題を抱えていると思います。winsock I / O完了ポートを使用してデータを送受信する2つのTCPアプリが相互に接続されています(非ブロッキングソケット)。
データ転送バーストが発生するまで、すべてが正常に機能します。送信者は、誤った/不正な形式のデータの送信を開始します。
送信するバッファをスタックに割り当てます。正しく理解していれば、これは間違っています。IOCPから「書き込み完了」通知を受け取るまで、これらのバッファは送信したままにしておく必要があるためです。
これを例に取ってください:
私が正しく理解していれば、これらのWSASend()呼び出しにはそれぞれ固有のバッファーが必要であり、そのバッファーは送信が完了したときにのみ再利用できます。
正しい?
さて、そのようなバッファの大きな袋を維持するためにどのような戦略を実装できますか、それらをどのように処理する必要がありますか、パフォーマンスの低下を回避するにはどうすればよいですか?
また、バッファを使用する場合は、送信元バッファから一時バッファに送信するデータをコピーする必要があるため、各ソケットのSO_SNDBUFをゼロに設定して、システムが再コピーしないようにします。すでにコピーされています。あなたは私と一緒ですか?よくわからない場合はお知らせください。
multithreading - ツイスト/トルネードなどはどのように機能しますか
ユーザーごとにスレッドを作成するのとは別の方法で機能することを理解しています。それはどのように正確に機能しますか?
(「ノンブロッキング」はそれと関係がありますか?)