java nio select 的代码和linux epoll 的代码看起来是一样的。没有循环获取套接字 fd 之类的东西,linux 选择代码片段确实使用循环获取套接字 fd。
所以我的问题是,java nio select 和 linux epoll 的方式是一样的吗?
java nio选择
while (true) {
try {
selector.select();
Set<SelectionKey> selectionKeys = selector.selectedKeys();
selectionKeys.forEach((selectionKey) -> {
final SocketChannel client;
try {
if (selectionKey.isAcceptable()) {
ServerSocketChannel server = (ServerSocketChannel) selectionKey.channel();
client = server.accept();
client.configureBlocking(false);
client.register(selector, SelectionKey.OP_READ);
String key = "[" + UUID.randomUUID().toString() + "]";
clientMap.put(key, client);
} else if (selectionKey.isReadable()) {
client = (SocketChannel) selectionKey.channel();
ByteBuffer readBuffer = ByteBuffer.allocate(1024);
int count = client.read(readBuffer);
if (count …Run Code Online (Sandbox Code Playgroud)