class: center, middle # I/O模型 --- ## 大纲 - 操作系统I/O模型分类 - 每种I/O模型在服务端的应用 - I/O模型的性能比较和发展 --- ## 同步阻塞I/O  --- ## 应用 - Rack CGI, Webrick ```ruby TCPServer.open("127.0.0.1", 14641) {|server| s = server.accept s.puts Time.now s.close } ``` --- ## 同步非阻塞I/O  --- ## 应用 ```ruby server = TCPServer.new(2202) begin sock = server.accept_nonblock rescue IO::WaitReadable, Errno::EINTR IO.select([server]) retry end ``` --- ## I/O 多路复用  --- ## 系统调用 * select/poll O(n) * epoll/kqueue O(1) -- - Nginx - EventMachine - Redis - Node.js --- ## Redis Reactor  --- ## 信号驱动I/O  --- ## 异步I/O  --- ## AIO - linux POSIX AIO: libeio, glibc libaio - windows IOCP --  --- ## nginx  --- ## 比较  --- ## 网络库 - libevent : c - libev : c++ - libuv : c++ -- ## Ruby - **EventMachine** : 自建 - **nio4r** : libev --- # 谢谢大家 Q&A