タグ付けされた質問 「nonblocking」

30
Pythonのsubprocess.PIPEでの非ブロッキング読み取り
サブプロセスモジュールを使用してサブプロセスを開始し、その出力ストリーム(stdout)に接続しています。stdoutで非ブロッキング読み取りを実行できるようにしたい。.readlineを非ブロック化する方法、または呼び出す前にストリームにデータがあるかどうかを確認する方法はあり.readlineますか?これを移植可能にするか、少なくともWindowsとLinuxで動作させたいです。 ここに私が今それを行う方法があります(利用.readline可能なデータがない場合はブロックしています): p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()

16
非同期のjdbc呼び出しは可能ですか?
データベースへの非同期呼び出しを行う方法はあるのでしょうか。 たとえば、処理に非常に長い時間がかかる大きなリクエストがあるとします。リクエストを送信し、リクエストが値を返すときに(リスナー/コールバックなどを渡すことによって)通知を受け取りたいと考えています。データベースが応答するのを待つのをブロックしたくありません。 スレッドのプールを使用することは、スケーリングしないので解決策であるとは思いません。大量の同時リクエストの場合、これは非常に多数のスレッドを生成します。 この種のネットワークサーバーの問題に直面しており、select / poll / epollシステムコールを使用して、接続ごとに1つのスレッドが存在しないようにすることで解決策を見つけました。データベースリクエストで同様の機能を使用する方法を知りたいだけですか? 注:FixedThreadPoolを使用するのが適切な回避策である可能性があることは承知していますが、(余分なスレッドを使用せずに)本当に非同期のシステムを開発した人がいないことに驚いています。 **更新** 実際の実用的なソリューションがないため、私は自分でライブラリ(finagleの一部)を作成することにしました:finagle-mysql。それは基本的にmysql要求/応答をデコード/デコードし、内部でFinagle / Nettyを使用します。接続数が非常に多い場合でも、非常によく拡張されます。

9
C#でfire and forgetメソッドを実行する最も簡単な方法は?
私はWCFでそれらが[OperationContract(IsOneWay = true)]属性を持っているのを見ました。しかし、WCFは、ノンブロッキング関数を作成するためだけに、遅くて重いようです。static void nonblockingのようなものが理想的ですがMethodFoo(){}、それは存在しないと思います。 C#でノンブロッキングメソッドコールを作成する最も速い方法は何ですか? 例えば class Foo { static void Main() { FireAway(); //No callback, just go away Console.WriteLine("Happens immediately"); } static void FireAway() { System.Threading.Thread.Sleep(5000); Console.WriteLine("5 seconds later"); } } 注意:これを読んでいる人はみな、メソッドを実際に終了させたいかどうかを検討する必要があります。(#2のトップアンサーを参照)メソッドを終了する必要がある場合は、ASP.NETアプリケーションなどの一部の場所で、スレッドをブロックして存続させるために何かを行う必要があります。それ以外の場合、これは「fire-forget-but-never-actually-execute」につながる可能性があります。その場合、もちろん、コードをまったく記述しない方が簡単です。(これがASP.NETでどのように機能するかについての良い説明)
150 c#  .net  nonblocking 


9
非ブロッキングI / Oは、マルチスレッドのブロッキングI / Oよりも本当に高速ですか?どうやって?
ブロックI / Oと非ブロックI / Oに関するいくつかの技術的な詳細でWebを検索したところ、非ブロックI / OはブロックI / Oよりも高速であると述べた人が何人か見つかりました。このドキュメントの例です。 ブロックI / Oを使用する場合、もちろん現在ブロックされているスレッドは他に何もできません...ブロックされているためです。ただし、スレッドがブロックされ始めるとすぐに、OSは別のスレッドに切り替えることができ、ブロックされたスレッドに対して何かするまで、元に戻せません。したがって、CPUを必要とし、ブロックされていない別のスレッドがシステムにある限り、イベントベースの非ブロックアプローチと比較して、CPUアイドル時間はこれ以上ないはずです。 CPUがアイドル状態である時間を減らすことに加えて、特定の時間枠でコンピューターが実行できるタスクの数を増やすためのもう1つのオプションがあります。スレッドの切り替えによって生じるオーバーヘッドを減らします。しかし、これをどのように行うことができますか?そして、オーバーヘッドは測定可能な効果を示すのに十分な大きさですか?これが私がそれをどのように機能させるかについてのアイデアです: ファイルの内容をロードするために、アプリケーションはこのタスクをイベントベースのI / Oフレームワークに委任し、ファイル名とともにコールバック関数を渡します イベントフレームワークはオペレーティングシステムに委任します。オペレーティングシステムは、ファイルをメモリに直接書き込むようにハードディスクのDMAコントローラをプログラムします。 イベントフレームワークにより、さらにコードを実行できます。 ディスクからメモリへのコピーが完了すると、DMAコントローラが割り込みを発生させます。 オペレーティングシステムの割り込みハンドラは、ファイルがメモリに完全に読み込まれていることをイベントベースのI / Oフレームワークに通知します。それはどのように行うのですか?信号を使用していますか? イベントI / Oフレームワーク内で現在実行されているコードが終了します。 イベントベースのI / Oフレームワークはキューをチェックし、ステップ5のオペレーティングシステムのメッセージを確認して、ステップ1で取得したコールバックを実行します。 それはどのように機能しますか?そうでない場合、どのように機能しますか?つまり、スタックを明示的に操作する必要なく、イベントシステムが機能できるということです(スレッドを切り替えながらスタックをバックアップし、別のスレッドのスタックをメモリにコピーする必要がある実際のスケジューラなど)。これで実際にどれだけの時間を節約できますか?もっとありますか?

2
トルネードはいつどのように使用しますか?いつ役に立たないのですか?
わかりました。トルネードは非ブロッキングで非常に高速で、多くの継続的なリクエストを簡単に処理できます。 しかし、それは特効薬ではないと思います。DjangoベースのサイトやTornadoを使用する他のサイトを盲目的に実行しただけでは、パフォーマンスは向上しません。 私はこれの包括的な説明を見つけることができなかったので、私はここでそれを尋ねています: トルネードはいつ使用する必要がありますか? いつ役に立たないのですか? それを使用するとき、何を考慮に入れるべきですか? Tornadoを使用して非効率的なサイトを作成するにはどうすればよいですか? サーバーとWebフレームワークがあります。フレームワークはいつ使用する必要があり、いつ他のフレームワークに置き換えることができますか?

5
非同期、ノンブロッキング、イベントベースのアーキテクチャの違いは何ですか?
違いは何ですか: 非同期、 ノンブロッキング、および イベントベースのアーキテクチャ? 何かを非同期と非ブロッキング(およびイベントベース)の両方にすることはできますか? プログラミングで最も重要なことは、非同期、非ブロッキング、および/またはイベントベース(または3つすべて)です。 あなたが例を提供することができれば、それは素晴らしいことです。 私が同様のトピックに関するこの素晴らしいStackOverflowの記事を読んでいたので、この質問が尋ねられていますが、それは上記の私の質問に答えていません。

10
Cノンブロッキングキーボード入力
ユーザーがキーを押すまでループするプログラムをC(Linux上)で作成しようとしていますが、各ループを続行するためにキーを押す必要はありません。 これを行う簡単な方法はありますか?おそらくそれができると思いますがselect()、それは大変な作業のようです。 あるいは、非ブロッキングioの代わりに、プログラムが閉じる前にクリーンアップを行うためにctrl-cキーを押す方法はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.