前置知识:Reactor模式,javaNIO,这里只说区别Reactor模式和多线程oio的区别
多线程oio的优点在于对于每个连接都用一个线程来处理,但是大量的线程的切换、阻塞会消耗大量服务器资源。
而reactor模式首先使用了select(java中的实现为javaNIO),在io准备好时才进行处理。虽然在accept连接时就new了一个handler(handler继承了runable),但是操作系统中并不存在new状态的线程,只存在于java程序中,只有当handler线程真正start之后才会创建线程。这样使用单线程就可以达到很高的效率和并发量。
reactor同样存在缺点,就是所有的handler和reactor都运行于同一个线程,如果有一个handler阻塞,那么整个reactor和其他的handler都会得不到执行。另外,单线程也会对多核处理器的效率造成浪费。(早期的nginx和redis都是使用的reactor模式)
参考代码: