問題タブ [event-driven]
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.
multithreading - イベント駆動型プログラミングとは何ですか?
イベント駆動型プログラミングとは何ですか?イベント駆動型プログラミングはスレッド化と関係がありますか?サーバーと、サーバーがユーザーリクエストを処理し、データを管理する方法について読んで、この質問に行き着きました。ユーザーがリクエストを送信すると、サーバーはデータの処理を開始し、状態をテーブルに書き込みます。どうしてこんなことに?サーバーはそのユーザーのデータの処理を停止し、別のユーザーのデータの処理を開始しますか、それともすべてのユーザーの処理が別のスレッド(マルチスレッドサーバー)で実行されますか?
http - Netty での同期 HTTP 呼び出し
私のアプリは HTTP リクエストを受け取り、パイプラインの途中で、サポート情報を得るために別のサーバーへの呼び出しが行われます。最初の HTTP 要求は、その応答が返されるまでパイプラインを続行できません。I/O スレッドからは使用できないため、awaitUninterruptability()
これらの呼び出しを行う最善の方法は何ですか? Netty のイベント ループをブロックせず、呼び出しが返されるまでクライアントのパイプラインを保留にし、パイプラインに次のように指示します。続けて?
epoll - epoll/ノンブロッキング イベント ドリブン IO
epoll ベースのノンブロッキング イベント ドリブン ネットワーク IO に関する私の質問はこれです - epoll サービス プロバイダーへのクライアント接続はどのように開いたままになりますか? サーバー側に永続的な受信者がいないのに、クライアント側の接続が切断されないのはなぜですか?
サーバーがリクエストを処理し、おそらく先に進んだときに、クライアント接続を開いたままにするにはどうすればよいですか (POST でのキープアライブ)。
cpu-usage - イベント駆動型プログラミングと代替のメインループ
私の知る限り、イベント駆動型プログラムには、次のようなメインループが必要です。
このwhileループが高いCPU使用率を犠牲にする可能性があるかどうか、私はただ興味がありますか?メインループを使用せずにイベント駆動型プログラムを実装する他の方法はありますか?
ruby-on-rails - スレッド化されたフレームワークがイベント駆動型のフレームワークよりも優れているのはいつですか? (つまり、レールが node.js よりも優れているのはいつですか?)
スレッド化されたフレームワークが何であるかを理解しています (Rails、Django、Symfony2 など)。また、イベント駆動型フレームワーク (Node.js、EventMachine、Twisted など) とは何か、なぜライブ、チャット、スピードなどに優れているのかを理解しています。そう:
- イベント駆動型フレームワークの欠点は何ですか?
- Rails を Node.js より優先するのはいつですか?
- すべての新しい Web サーバーが EventMachine、Twisted、または Node.js で作成されていないのはなぜですか?
- Django や Rails などの有名なフレームワークは、イベント駆動型になるか、それとも死にますか?
android - Android ライフサイクル ハンドラを呼び出すのは誰ですか?
Android のイベント駆動型プログラミング パラダイムについてかなり混乱していますか? ライフサイクル ハンドラ (onCreate()、onResume() など) の呼び出しは誰が担当していますか? アンドロイドOSですか?それとも、アプリケーション プロセスで実行される Dalvik VM ですか?
誰か私の質問に答えたり、関連するリソースを教えてくれませんか? どうもありがとうございました。
c# - 独自のイベントにサブスクライブする Winform
開発者が WinForms で行っている一般的なことの 1 つは、フォーム/コントロールが独自のイベントをサブスクライブすることです。
それよりも
これで、2 番目の方法はよりオブジェクト指向であり、1 番目の方法はイベント ドリブンであり、オーバーライドに向けてリファクタリングする傾向があることがわかりました。これを行わない理由はありますか? 私がやりたくないのは、本当に必要のない、純粋に審美的な選択をすることです。
c - ソケットを備えたCのイベント駆動型モデル
私は、特にソケットを使用したCでのイベント駆動型プログラミングに非常に興味があるので、研究に時間を割くつもりです。
クライアント/サーバーアプリのように、ファイルとネットワークのI / Oが多いプログラムを作成したいとします。基本的に、最初の質問は、このモデルの背後にある哲学です。通常のプログラミングでは新しいプロセスを生成しますが、どうして1つのプロセスで他の多くの要求を実際に処理できるのでしょうか。たとえば、スレッドや他のプロセスを作成せずに接続を処理できるWebサーバーがいくつかあり、メインプロセスは1つだけです。
これは複雑ですが、さまざまなソリューションがどのように機能するかを知ることは常に素晴らしいことです。
java - AND、OR、および SEQ を使用したイベント ストリームのリアクション/ECA ルールによるイベント パターン検出
イベントが属性/値のペアのセットであるイベント ストリームがあります。
E1 = {(ID, val), (attr, val), (attr, val), ... }
AND, OR, SEQ
SNOOP スタイルのイベント代数のみを使用して、つまり、括弧
を使用せずに単純なパターンを検出したいと考えています。
例: E1 AND E2 OR E4
、E
は識別子です。
ここで、イベント処理エンジンを使用してイベント ストリームを追跡し、パターンが見つかった場合に対応し たいと考えています。ルールは、次の例のようにRuleML ECAルールに似ています。
これらのルールは、リストから生成/解析する必要があります。上記のような単純なパターンを検出できる CEP エンジンを誰かに勧めてもらえたら、それは素晴らしいことです。Esper
と prova (Prolog + Java)を試しましたが、リストのパターンを一連のルールに「解析」することができませんでした。
どんな助けでも大歓迎です!
Droolsがそのトリックを実行できるかどうか、誰か知っていますか? AND,OR,SEQ
特に、ルールの on/when 部分で使用できるようにする必要があります。
java - Javaでのノンブロッキング(非同期)DNS解決
JavaでDNSクエリ(ホスト名でIPを取得)を非ブロッキング方式で非同期に解決する(つまり、ステートマシン、1クエリ= 1スレッドではない)クリーンな方法はありますか?同時に数万のクエリを実行したいのですが、何万ものスレッドを実行しません)?
私がこれまでに見つけたもの:
- 標準
InetAddress.getByName()
の実装はブロッキングであり、標準のJavaライブラリには非ブロッキングの実装がないように見えます。 - DNSを一括して解決することで同様の問題が発生しますが、見つかった唯一の解決策はマルチスレッドアプローチ(つまり、1つのスレッドが特定の瞬間に1つのクエリのみを処理する)であり、実際にはスケーラブルではありません。
- dnsjavaライブラリもブロックのみです。
- 2006年にさかのぼるdnsjavaには古代の非ブロッキング拡張機能があり、したがって、
Future
パラダイムの使用や、残念ながら、非常に限定されたキューのみの実装など、最新のJava同時実行機能が欠けています。 - dnsjnioプロジェクトもdnsjavaの拡張機能ですが、スレッドモデル(つまり、1クエリ= 1スレッド)でも機能します。
- asyncorgは、この問題を対象としてこれまでに見つけた最善の解決策のようですが、
次のようになります。
- これも2007年のもので、見捨てられたように見えます
- ほとんどすべてのドキュメント/javadocが不足しています
Fun
クラスなどの非標準的な手法をたくさん使用します
私が見逃した他のアイデア/実装はありますか?
明確化。かなり大量の(1日あたり数TB)ログがあります。すべてのログ行には、インターネット上のほぼどこからでも使用できるホスト名があります。さらに統計を計算するには、そのホスト名のIPアドレスが必要です。行の順序は実際には重要ではないので、基本的に、私の考えは2つのスレッドを開始することです。最初に行を反復処理します。
- 行を読み取り、解析し、ホスト名を取得します
- 指定されたホスト名を解決するためにDNSサーバーにクエリを送信し、回答をブロックしないでください
- 行とDNSクエリソケットハンドルをメモリ内のバッファに保存します
- 次の行に移動
そして、次の2番目のスレッド:
- DNSサーバーがクエリに応答するのを待ちます(
epoll
/kqueue
likeテクニックを使用) - 答えを読んで、それがバッファ内のどの行にあったかを見つけてください
- 解決されたIPを含む行を出力に書き込みます
- 次の答えを待つことに進みます
Perlでの単純なモデル実装はAnyEvent
、私の考えが一般的に正しく、この方法で1秒あたり15〜20Kクエリのような速度を簡単に達成できることを示しています(単純なブロッキング実装は、比較のために1秒あたり2〜3クエリのようになります)。これは4桁の違いのようなものです)。今、私はJavaで同じものを実装する必要があります-そして私は自分のDNS実装の展開をスキップしたいと思います;)