問題タブ [epoll]
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 - epoll メインループを使用した遅延実行
を使用してコードまたはタイムアウト イベントの遅延実行を作成するにはどうすればよいepoll
ですか? libevent と libev の両方に機能がありますが、epoll を使用してこれを行う方法がわかりません。
現在、メイン ループは次のようになっています。
経過時間を追加するだけでこの機能を実現できることは十分承知していますが、epoll を使用する方がよりクリーンなソリューションのように思えます。
asynchronous - ポーリング/エポールはブロックされますか?非同期IOとどう違うのですか?
私はいつもpoll/epollがブロックしないという印象を受けていました。そのため、Nginxなどの非ブロッキングサーバーで使用されます。
しかし、このStackoverflowの質問では、ポーリングがブロックされることが何度か述べられています。
では、poll / epollはブロックしますか?
そして、poll / epollは非同期IOとどう違うのですか?
python - epollを使用する必要がありますか、それともスレッドでrecvをブロックするだけですか?
スケーラブルなカスタムWebサーバーを作成しようとしています。これが私がこれまでに持っているものです:
メインループとリクエストインタープリターはCythonにあります。メインループは接続を受け入れ、プール内のプロセスの1つにソケットを割り当てます(プロセスである必要があります。GILがあるため、スレッドはマルチコアハードウェアのメリットを享受できません)。
各プロセスにはスレッドプールがあります。プロセスはソケットをスレッドに割り当てます。スレッドはrecv
ソケットを呼び出し(ブロック)、データを待ちます。一部が表示されると、リクエストインタープリターにパイプされ、WSGIを介してそのスレッドで実行されているアプリケーションに送信されます。
今、私はepollについて聞いたことがあり、少し混乱しています。epollを使用してソケットデータを取得し、それをプロセスに直接渡すことには利点がありますか?それとも、各スレッドを待機させる通常のルートに進む必要がありrecv
ますか?
PS:epollは実際に何に使用されますか?マルチスレッドとブロッキングfd
呼び出しは同じことを達成するようです。
python - Pythonでのポーリング/選択が理解できません
私は、UDPを使用して、Pythonでスレッド化された非同期ネットワーキングの実験を行っています。
ポーリングとPythonモジュールの選択について理解したいのですが、C /C++で使用したことはありません。
それらは何のためのものですか?ちょっとした選択はわかりますが、リソースを見ているとブロックされますか?ポーリングの目的は何ですか?
c++ - libeventの付加価値
主にepoll
ファイル記述子のベースループが必要な場合、他にどのような機能がlibevent
提供されますhttp
かdns
?
epoll
非常に大きなプロジェクトであることは承知していますが、ラッパー APIを作成するのは非常に簡単に思えます。
c++ - 通常のファイルの epoll
epoll
(Linuxで)通常のファイルに何らかの形で役立つでしょうか?主にソケットで使用されることは知っていますが、不思議です。
tcp - シングルスレッドで複数の接続からデータを読み取るクロスプラットフォームの方法
私のアプリケーションは複数の Web ページを同時にダウンロードする必要がありますが、Linux での epoll プログラミングの経験から、これが単一のスレッドで可能であることを知っています。現在、私はCURLを使用してHTTPとやり取りしていますが...
更新: curl の MULTI インターフェイスを発見しました: http://curl.haxx.se/libcurl/c/libcurl-multi.html質問は解決したと思います (-;
c - libevent を使用した epoll、kqueue などの NBIO を使用した効率的なプリフォーク サーバー設計
クライアントにデータを「ストリーミング」するための「comet」サーバーを作成する予定です。マルチコア CPU を利用するために過去に 1 つを強化しましたが、今はゼロから始めています。サーバーの電源として epoll/kqueue または libevent を使用する予定です。
私が重視してきた問題の 1 つは、どのサーバー設計を使用するかということです。マルチプロセス モデルを使用してすべての CPU コアを活用することを計画しているため、いくつかのオプションを利用できます。
- 事前にフォークされたマルチプロセス - 独自の受け入れを行う各プロセス
- マスターを使用した事前フォークされたマルチプロセス - マスター プロセスが受け入れ、記述子の受け渡しを使用して、受け入れたソケットをプロセスに渡します。
- 異なるポートを持つ事前フォークされたマルチプロセス - 各プロセスは、同じシステムの異なるポートでリッスンします。ロードバランサーは、個々のデーモン プロセスからの負荷フィードバックに基づいて、次の接続を取得するプロセスを決定します。
設計 #2 は最も複雑です。設計 3 は単純ですが、設計に関係なく追加のハードウェアが必要になります。これは、複数のマシンでこれを実行し、とにかくロードバランサが必要になるためです。設計 1 には雷の群れの問題がありますが、雷の群れは 8 つのプロセスでは大したことではないと思いますが、クライアントが絶えず接続と切断を繰り返している場合 (これはコメット サーバーであるため、これはまれなはずです) は大したことではありません。
私が見たように、#2は複雑で、受け入れごとにマスタープロセスとスレーブプロセスの間で記述子を渡すため、2つの追加のシステムコールが必要です。雷鳴の群れの問題とは対照的に、このオーバーヘッドを持っている方が良いでしょうか? 8 つのプロセスが起動して受け入れを実行している場合、デザイン #1 を使用すると、8 つの受け入れ呼び出しが表示される可能性がありますか?
デザインの選択の長所と短所は何ですか? あなたは何をお勧めします?
c++ - 非常に少数の接続の epoll と select
私はselectを使用して接続を処理してきましたが、最近ソケットライブラリに変更があり、selectはLinuxプラットフォームのepollに置き換えられました。
私のアプリケーション アーキテクチャは、1 つのみまたは最大 2 つのソケット接続を作成し、単一のスレッドでそれらを epoll/select するようなものです。
最近epollに切り替えて、アプリケーションのパフォーマンスが低下していることに気付きました。実際に驚いて、パフォーマンスが向上するか、同じになることを期待していました。他のさまざまな部分を調べてみましたが、変更されたコードはこれだけです。
非常に少数のソケット (1 つまたは 2 つなど) に epoll を使用すると、速度の点でパフォーマンスが低下しますか?
また、同じボックス(8 CPUコア)で約125のそのようなプロセスを実行していることに注意する必要があります。これは、同じマシンで epoll_wait を実行するプロセスが多すぎる場合に発生する可能性があります。このセットアップは、select を使用していたときと似ていました。
ボックスで、負荷平均がはるかに高いことに気付きましたが、CPU 使用率はまったく同じでした。これにより、I/O により多くの時間が費やされ、おそらく epoll 関連の変更が原因であると思われます。
問題を特定するために何をもっと調べるべきかについてのアイデア/ポインタ。
増加する絶対的なレイテンシーは平均 1 ミリ秒と非常に小さいですが、これはリアルタイム システムであり、この種のレイテンシーは一般的に受け入れられません。
ありがとう
やあ、
最新のfindindsでこの質問を更新すると、selectからepollへの切り替えとは別に、別の関連する変更が見つかりました.selectでの以前のタイムアウトは10ミリでしたが、epollではタイムアウトが以前よりもはるかに小さく(1マイクロなど)、設定が低すぎる可能性がありますいずれにせよ、select または epoll のタイムアウトによりパフォーマンスが低下しますか?
ありがとう
c - epollとスレッドを備えたソケットサーバー
リアルタイムエディタhttp://en.wikipedia.org/wiki/Collaborative_real-time_editor用にCでソケットサーバーを作成しようとしていますが、それに最適なサーバーアーキテクチャがわかりません。
最初はソケットサーバーにselectを使おうとしていましたが、その後epollについて読んでいましたが、クライアントがすべての文字を送信し、ユーザーがtextareaに書き込むので、epollが最良の選択だと思います。サーバーなので、サーバーには処理するデータがたくさんあります。
また、epollでスレッドを使用したいのですが、正確な使用方法がわかりません。ターゲットマシンで2つまたはすべてのCPUを使用する方が良いと思うので、スレッドを使用したいと思います。
私の計画は
サーバーの起動時に2つのスレッドを作成します
最初のスレッドは新しいクライアントを分析し、読み取りまたは送信の準備をします
2番目のスレッドには、クライアントとの間でデータを読み書きするジョブがあります
問題は、この2つのスレッドがepoll_waitでwhile(1)を使用することです。
私の質問は、これはスレッドでepollを使用するための優れたサーバーアーキテクチャですか?そうでない場合、私にはどのようなオプションがありますか?
編集:これは大学のプロジェクトであり、外部ライブラリの使用を許可されていないため、libevent、libev 、またはその他のライブラリを使用できません。