什么是epoll机制

epoll 是一种 I/O 事件通知机制,最初出现在 Linux 操作系统中,用于高效地管理大量的文件描述符(sockets、files、pipes 等)。它是 Linux 下的一种 I/O 复用机制,类似于 BSD 的 kqueue 和 Solaris 的 devpoll

从阻塞---

1.一个线程怎么处理多个i/o?

多个线程处理多个io 看起来可以,但会影响更多的性能。

普通-->使用一个while(true)循环不断轮训。结论 如果所有的流都没有数据,那么只会白白浪费cpu。---》cpu空转。

进一步 -〉在while里加一步select(stream)在for循环之前。结论:从select可以知道 有io事件发生了,但是不知道是哪几个流。我们只能无差别的轮训,找出能读写的数据,进行操作。

再进一步epoll -》

while(true){
active_stream() = poll_wait();
for(){
    read or write
}
}

 结论,epoll会把哪个流发生了什么io事件通知我们,此时我们对这些流的操作都是有意义的。复杂度降低到了O(1);

在handle中:

  private native static long nativeInit();

    MessageQueue(boolean quitAllowed) {
        mQuitAllowed = quitAllowed;
        mPtr = nativeInit();
    }
nativeInit(),就有对epoll的初始化;mPtr 是一个标识

在handle的 Message next() 中,有一行

nativePollOnce(ptr, nextPollTimeoutMillis);nextPollTimeoutMillis等待的时间

有等待就会有唤醒,唤醒就是 nativeWake ,-=--》是字节码底层唤醒的

 

你可能感兴趣的:(服务器,运维)