問題タブ [asynchronous]

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 に答える
25497 参照

linux - POSIX 非同期 I/O (AIO) のステータスは?

Web には、POSIX AIO 機能をさまざまな詳細で説明しているページが散在しています。それらのどれもひどく最近のものではありません。彼らが正確に何を説明しているのかは明らかではありません。たとえば、ここの Linux カーネル非同期 I/O サポートの「公式」(?) Web サイトは、ソケットが機能しないと述べていますが、私の Ubuntu 8.04.1 ワークステーションの「aio.h」マニュアル ページはすべて、それを暗示しているようです。任意のファイル記述子に対して機能します。次に、ドキュメントがさらに少ないライブラリ層で動作するように見える別のプロジェクトがあります。

知りたい:

  • POSIX AIO の目的は何ですか? 私が見つけることができる実装の最も明白な例がソケットをサポートしていないと言っていることを考えると、全体が奇妙に思えます。非同期ディスク I/O のためだけですか? もしそうなら、なぜ超汎用 API なのですか? そうでない場合、ディスク I/O が最初に攻撃されたのはなぜですか?
  • 私が見ることができる完全なPOSIX AIOプログラムの例はどこにありますか?
  • 誰かが実際にそれを実際に使用していますか?
  • POSIX AIO をサポートするプラットフォームは? 彼らはどの部分をサポートしていますか?<aio.h>約束しているように見える暗黙の「任意の FD への任意の I/O」を本当にサポートしている人はいますか?

私が利用できる他の多重化メカニズムは完全に優れていますが、そこに浮かぶ情報のランダムな断片に興味をそそられました。

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

.net - .Netの非同期ファイルIO

コンパイラ、オプティマイザ、およびインデックス作成テクノロジについて詳しく知るために、C#でおもちゃのデータベースを構築しています。

ページをバッファプールに取り込むための(少なくとも読み取り)要求間で最大の並列処理を維持したいのですが、.NETでこれを実現するための最善の方法について混乱しています。

ここにいくつかのオプションと私がそれぞれに遭遇した問題があります:

  1. 使用法System.IO.FileStreamBeginRead方法

    ただし、ファイル内の位置はの引数ではなく、(メソッドを介して設定された)BeginReadのプロパティであるため、一度に1つのリクエストしか発行できず、その間ストリームをロックする必要があります。(または、私は?との間にのみロックを保持し、電話をかける前にロックを解除した場合、ドキュメントは不明確です。誰か知っていますか?)これを行う方法を知っていますが、それが最良の方法。FileStreamSeekSeekBeginReadEndRead

  2. 構造とkernel32.dllSystem.Threading.Overlappedの関数へのP\Invokeを 中心とした別の方法があるようです。ReadFileEx

    残念ながら、特に管理された言語では、サンプルが不足しています。このルート(動作させることができる場合)にはThreadPool.BindHandle、スレッドプール内のメソッドとIO完了スレッドも含まれているようです。これがウィンドウの下でこのシナリオを処理するための認可された方法であるという印象を受けますが、私はそれを理解しておらず、初心者に役立つドキュメントへのエントリポイントを見つけることができません。

  3. 他に何かありますか?

  4. コメントの中で、jacobはFileStream、飛行中の読み取りごとに新しいものを作成することを提案しています。

  5. ファイル全体をメモリに読み込みます。

    これは、データベースが小さい場合に機能します。コードベースは小さく、他にも多くの非効率性がありますが、データベース自体はそうではありません。また、大規模なデータベース(ページング、外部ソーティングなど、複雑さの大部分を占めることが判明)を処理するために必要なすべての簿記を確実に実行していることを確認したいと思います。誤ってごまかしやすい。

編集

解決策1に疑問がある理由の明確化:BeginReadからEndReadまでずっと単一のロックを保持するということは、別の読み取りが進行中であるという理由だけで読み取りを開始したい人をブロックする必要があることを意味します。新しい読み取りを開始するスレッドは、結果が利用可能になる前に(一般に)さらにいくつかの作業を実行できる可能性があるため、これは間違っていると感じます。(実際、これを書くだけで、新しい解決策を考えるようになりました。私は新しい答えとして置きました。)

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

python - Python on Windows - 複数の子プロセスを待つ方法は?

アクティブな待機(ポーリング)なしで、Windows上のPythonで複数の子プロセスを待機する方法は? このようなものはほとんど私にとってはうまくいきます:

問題は、のproc2前に終了した場合proc1でも、親プロセスが を待機することですproc1。Unix ではwaitpid(0)、子プロセスの終了時にループ内で使用して、子プロセスのリターン コードを取得します - Windows 上の Python でこのようなことを達成するにはどうすればよいですか?

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

database - PeopleSoft Integration Brokerの非同期メッセージは受信側でシリアルに配信されますか?

PeopleSoftアプリケーションで奇妙な問題が発生しました。統合ブローカーのメッセージが順不同で処理されているようです。別の可能性があります。それは、コミットが非同期で実行され、トランザクションが順不同で完了することを可能にすることです。

詳細レコードの挿入が多数あり、その後に、挿入されたばかりの行の更新を実行するトレーラーレコードが続きます。一部の行は更新を受信して​​いません。この問題は散発的で、約6か月に1回ですが、統計的に重大な財務報告エラーを引き起こします。

誰かがPeopleToolsの内部を十分に処理して、それが何をしているのかを知ることができれば、おそらく問題の回避策を見つけることができると思います。

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

.net - .NET での非同期ソケット I/O の分散/収集

多くの短いメッセージを含む高スループットの状況で、.NET で Stream.BeginWrite Async I/O API を使用しようとしています。そのため、スキャッター/ギャザー API は、コンテキスト スイッチ (および CPU 使用率) の数を大幅に削減します。この API は LPBUFFERS Win32 API を使用しますか? Scatter/Gather I/O の代替 API はありますか?

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

.net - .NET: バックグラウンド スレッド シグナルのメイン スレッド データを利用するにはどうすればよいですか?

ThreadBがイベントの発生を待機するのをブロックせずに、 ThreadAが何らかのイベントのThreadBにシグナルを送る適切な手法は何ですか?

共有 List<T> を埋めるバックグラウンド スレッドがあります。取得できるデータがあることを「メイン」スレッドに非同期で通知する方法を見つけようとしています。


EventWaitHandle オブジェクトを使用してイベントを設定することを検討しましたが、メイン スレッドを Event.WaitOne() に置くことができません。


私はデリゲート コールバックを持つことを検討しましたが、a) メイン スレッドがデリゲートで作業を行うことを望んでいません: スレッドは作業に戻ってさらに何かを追加する必要があります - デリゲートの実行中にスレッドを待機させたくありません。 ) デリゲートをメイン スレッドにマーシャリングする必要がありますが、UI を実行していません。デリゲートを呼び出します。


私は、ゼロ間隔のSystem.Windows.Forms.Timerを開始するデリゲートコールバックがあると考えました(タイマーへのスレッドアクセスが同期されています)。このようにして、スレッドは呼び出し時にスタックするだけで済みます

Timer.Enabled = true;

しかし、それはハックのようです。

昔は、私のオブジェクトは非表示のウィンドウを作成し、スレッドにその非表示のウィンドウの HWND にメッセージを投稿させていました。非表示のコントロールを作成することを検討しましたが、ハンドルが作成されていないコントロールで.Invokeできないことがわかりました。さらに、UI がありません。オブジェクトは、Web サーバー、サービス、またはコンソールで作成された可能性があります。グラフィカル コントロールが表示されることも、System.Windows への依存関係をコンパイルすることもありません。フォーム。


オブジェクトに ISynchronizeInvoke インターフェイスを公開させることを検討しましたが、.Invoke() を実装する必要があり、それが私の問題です。


イベントが発生するのを待ってスレッド B をブロックせずに、スレッド A に何らかのイベントのスレッド B を通知させる適切な手法は何ですか?

0 投票する
8 に答える
13588 参照

ruby-on-rails - Railsアプリケーションで非同期ジョブを実行する最良の方法は何ですか?

非同期処理を行うプラグインがいくつかあることは知っています。どれが最高で、その理由は何ですか?

私が知っているものは次のとおりです。

0 投票する
18 に答える
208069 参照

php - PHP で非同期 HTTP リクエストを作成する方法

PHP で非同期 HTTP 呼び出しを行う方法はありますか? のようなことをしたいだけですがfile_get_contents()、残りのコードを実行する前にリクエストが完了するのを待ちません。これは、アプリケーションである種の「イベント」を開始したり、長いプロセスをトリガーしたりするのに非常に役立ちます。

何か案は?

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

c# - System.Diagnostics.Process.Start奇妙な動作

C#で他のアプリケーションを起動および監視するためのアプリケーションを作成しています。System.Diagnostics.Processクラスを使用してアプリケーションを起動し、Process.Respondingプロパティを使用してアプリケーションを監視して、100ミリ秒ごとにアプリケーションの状態をポーリングしています。Process.CloseMainWindowを使用してアプリケーションを停止するか、Process.Killを使用して、応答しない場合はアプリケーションを強制終了します。

基になるプロセスがループでハングし、CloseMainWindowに応答しない場合でも、プロセスオブジェクトが応答プロパティが常にtrueを返す状態になることがあるという奇妙な動作に気づきました。

これを再現する1つの方法は、プロセスインスタンスを開始した直後にRespondingプロパティをポーリングすることです。だから例えば

エラー状態を再現します

動作します。スリープ期間を500に短縮すると、エラー状態が再び発生します。

開始後の_process.Respondingの応答が速すぎると、オブジェクトが適切なWindowsメッセージキューハンドラーを取得できなくなるようです。_process.Startが非同期作業を終了するのを待つ必要があると思います。Thread.Sleepを呼び出すよりも、これを待つためのより良い方法はありますか?1000ミリ秒で常に十分だとは確信していません。

0 投票する
9 に答える
9829 参照

php - PHP 非同期 Web サービス

を使用して Web サービスへの非同期呼び出しを行うにはどうすればよいPHP SOAP Extensionですか?