問題タブ [kqueue]
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.
unix - AIX メカニズムに EPOLL/KQUEUE または同等のものはありますか?
AIX メカニズムには EPOLL(Linux2.6)/KQUEUE(FreeBSD)/IO Completion Port(Windows) または同等のものはありますか?
また、多数のネットワーク接続に対して、AIX 上の AIO にはどのようなメカニズムが最適ですか?
たとえば、ベンチマークによると、メカニズム KQUEUE / EPOLL は SELECT よりもはるかに高速です。 http://libevent.org/
c - SIGPIPE の sig_t シグナルを宣言する場所
現在、サーバープロセスのスレッドごとに複数のクライアントを処理するために kqueue を使用しているため、Signal SIGPIPE が表示されたときにスレッドを終了させたくありません。対応する socked id を kqueue から削除したいだけです。したがって、私の質問は次のとおりです。シグナルハンドル内の適切なソケット ID を取得し、それを解析してプロセスに戻してイベント kqueue から削除する方法はありますか、または SIGPIPE を SIG_IGN に jsut し、-1 を返すことで削除を処理しますか?送信?タイムアウト時間の後に-1値を返すか、すぐにsend -1を返しますか?
そして最後に、信号無視が私の解決策である場合: id の宣言を配置する必要がある場所
それはメイン関数にある必要がありますか?または対応するスレッドの先頭に?それともグローバル要素として?
c - How to notify an abnormal client termination to server?
As the Title already says im looking for a way, to get notified when a client closes his Session unnormal.
I'm using the freeBSD OS. The server is running with Xamount threads (depending on CPUcore amount). So I'm not forking, and there isn't a own process for each client.
That's why sending an deathpackage all time_t seconds, to recive a SIGPIPE isn't an option for me. But i need to remove left clients from the kqueue, because otherwise after too many accept()'s my code will obviously run into memory troubles.
Is there a way, I can check without high performance loose per client, they are connected or not?
Or any event-notification, that would trigger if this happens? Or maybe is there a way of letting a programm send any signal to a port, even in abnormal termination case, before the Client process will exite?
python - epoll の kqueue の unregister 関数に似た関数は何ですか?
Python Epoll には、登録済みのファイル記述子を epoll オブジェクトから削除する epoll.unregister という関数があります。これに似たKqueueの機能を知っている人はいますか。kqueue の場合、イベントを削除する方法しか見つかりませんでした。
macos - MacOS X で生成されたプロセスの制限
MacOS X Mountain Lion で多数のプロセス (200) を生成する問題が発生しています (ただし、この問題はバージョン固有ではありません)。私がやっていることは、STDIN、STDOUT、および STDERR がパイプに接続されているプロセス (私のテストでは /bin/cat です) を起動することです。そのもう一方の端は生成 (親) プロセスです。
親プロセスはデータをプロセスの STDIN に書き込みます。これは [/bin/cat] 子プロセスにパイプされます。次に子プロセスはデータを STDOUT から吐き出し、親プロセスによって読み取られます。/bin/cat はテスト用です。
私は実際にkqueueを使用して、STDINパイプに利用可能なスペースがあるときに通知を受けています。kqueue が EVFILT_WRITE イベントでスペースが利用可能であることを通知すると、このイベントは、ブロックせずに書き込むことができる正確なバイト数も通知します。
これはすべてうまく機能し、100 個の子 (/bin/cat) プロセスを簡単に作成でき、すべてがブロックされることなく (終日) パイプを通過します。ただし、プロセス数を 200 に増やすと、STDIN パイプの 1 つへの write() 呼び出しで単一の kqueue サービス スレッドがブロックされると、すべてが停止します。このイベントは、16384 バイト (基本的に空のパイプ) が使用可能であることを示していますが、プログラムが正確に 16384 バイトをパイプに書き込もうとすると、とにかく write() がブロックされます。
最初、私はマックスに走っていると思った。開いているファイルの問題ですが、開いているファイルの ulimit を 8192 に引き上げたので、それは問題ではありません。いくつかのグーグルで発見したことは、OS X では、STDIN/STDOUT/STDERR は実際には「ファイル」(または「パイプ」) ではなく、実際にはデバイスであるということです。プロセスがハングした場合、コマンドラインで lsof を実行すると、ファイル システムを stat() できないという警告が表示されてハングします。
プロセスを強制終了するとすぐに、lsof が完了します。これは、STDIN/OUT/ERR が実際にはデバイスであり、何らかの制限に直面しているという概念を強化します。
たとえば、作成できる「デバイス」の数に制限はありますか? これを何とか増やせないか?
c - スレッドに送信されたシグナルで kevent() を中断する方法は?
作業中のスレッドにシグナルで通知したい - イベントの待機を停止し、いくつかのグローバル条件をチェックする必要があります。Linuxで使用epoll_pwait
していますが、Mac OSでも同じことをしたいと考えています。
しかし、kqueue(2)
マニュアルには次のように書かれています。
EVFILT_SIGNAL ... 特定のスレッドではなく、プロセスに送信されたシグナルのみがフィルターをトリガーします。
この制限を克服するにはどうすればよいですか? または、唯一のスレッドが待機していることを通知する別の良い方法があるのkevent
でしょうか?
linux - 「読み取り可能」を構成するもの (kqueue/epoll)
リモートホストが正常に接続をシャットダウンした場合、epoll
を報告EPOLLIN
し、呼び出しread
またはrecv
ブロックせず、0 バイト (つまり、ストリームの終わり) を返すことを私は知っています。
ただし、接続が正常に閉じられず、write
またはsend
操作が失敗した場合、これによりepoll
、その後そのソケットが返さEPOLLIN
れ、同じ/類似のストリーム シナリオの終わりが生成されますか?
この動作に関するドキュメントを見つけようとしましたが、成功しませんでした。テストはできましたが、特定のカーネル バージョンの特定のディストリビューションで何が起こるかについては興味がありません。