24

JavaにLinuxepollに相当するものはありますか?

epollを使用すると、スレッドは多数の異種イベントに反応できます。たとえば、ソケットイベントまたはコンソールからの入力のいずれかに反応するスレッドを作成できます。C ++では、stdioとソケットをepollに登録することでこれを実装できます。私のスレッドは、これらのいずれかからのイベントによってトリガーされます。

Javaにも同様の機能がありますか?私はnioパッケージを見ました、それは私がセレクターで多くのソケットを登録することを可能にします。しかし、コンソール/標準のioをセレクターに登録する方法はないようです。私は何かを見ていませんか?これを行う別の方法はありますか?

「理由」について:ソケットを介して通信するプログラムを作成したいのですが、コンソールからコマンドを入力してこのプログラムを駆動したいと思います。コンソール入力と通信を異なるスレッドに分離することでこれを行う方法は知っていますが、単一のスレッドでこれを行う方法があるかどうか知りたいです。

ありがとう。df

4

2 に答える 2

28

Java SE 6 の拡張機能

java.nio

java.nio.channels.SelectorProviderLinux epoll イベント通知機能に基づく新しい実装が含まれています。epoll 機能は、Linux 2.6 以降のカーネルで利用できます。新しい epoll ベースの SelectorProvider 実装は、Selector に登録された何千もの SelectableChannels がある場合、従来の poll ベースの SelectorProvider 実装よりもスケーラブルです。2.6 カーネルが検出されると、新しい SelectorProvider 実装がデフォルトで使用されます。2.6 より前のカーネルが検出されると、ポーリングベースの SelectorProvider が使用されます。

https://docs.oracle.com/javase/8/docs/technotes/guides/io/enhancements.html

于 2012-11-08T07:42:13.663 に答える
7

はい、パッケージは/と同等の機能を提供する snioの使用を許可し、実際には実装の 1 つがバックエンドとして使用されます (これはJava プロパティを介して選択されます)。セレクターは通常、ネットワーク ソケットで使用されますが、ドキュメントのさまざまな実装に目を通すと、標準入力でもこのメカニズムを使用できる可能性が高いと思います (古いベースの API間を移動できるヘルパー クラスがあります)。およびAPI をある程度)。Selectorpoll()select()epolljava.nio.channels.spi.SelectorProviderChannelStreamnio

于 2012-05-16T16:56:58.593 に答える