平凉市网站建设制作,企业网站改版的意义,制作一个网站平台吗,深圳seo顾问一、NIO为什么很少注册OP_WRITE事件
1、OP_WRITE触发条件#xff1a;当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间#xff0c;小块数据直接写入即可#xff0c;没必要注册该操作类型#xff0c;否则该条件不断就绪浪费cpu#xff1b;但如果是写密集型…一、NIO为什么很少注册OP_WRITE事件
1、OP_WRITE触发条件当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间小块数据直接写入即可没必要注册该操作类型否则该条件不断就绪浪费cpu但如果是写密集型的任务比如文件下载等缓冲很可能满注册该操作类型很有必要同时注意写完后取消注册 1、单线程Reactor
之前已经解释过了就是一个线程处理连接、读、业务处理、写redis5.0时候用的就是单线程Reactor模式我再把图挂一次 2、多线程Reactor redis6.0是采用多线Reactor模式但是有点不同主线程处理连接和读事件子线程去处理具体读、写操作具体的业务操作为了降低并发操作还是主线程去处理
二、直接内存比堆内存快在哪里 使用直接内存就会少一次数据拷贝
三、零拷贝Linux对零拷贝的实现
一次读取和发送操作就会有四次用户态到内核态的切换
传统数据传输DMA拷贝不需要CPU参与 Linux的MMAP内存映射 通过MMAP系统调用直接读取文件不需要CPU参与拷贝
Linux的sendfile Linux的slice PIPE管道类似于共享内存两次拷贝和两次上下文切换因为调用系统函数slice
NIO目前只支持MMAP和sendfile
kafka通过客户端发来消息通过MMAP和顺序写持久化到磁盘再通过sendfile把消息发送给客户端
Netty可以在直接内存上操作的并且引入了逻辑缓冲区多个缓冲区合并一个后面再看吧
四、Linux网络IO模型
1、同步和异步
关注的是调用方是否主动获取结果
同步:同步的意思就是调用方需要主动等待结果的返回异步:异步的意思就是不需要主动等待结果的返回而是通过其他手段比如状态通知 回调函数等。
2、阻塞和非阻塞
主要关注的是等待结果返回调用方的状态
阻塞:是指结果返回之前当前线程被挂起不做任何事非阻塞:是指结果在返回之前线程可以做一些其他事不会被挂起。
3、Linux的五种I/O模型
1阻塞I/Oblocking I/O
2非阻塞I/Onoblocking I/O
3I/O复用select、poll和epoll I/O multiplexing
4信号驱动I/Osignal driven I/O (SIGIO)
5异步I/Oasynchronous I/O
IO 复用需要使用两个系统调用(select 和 recvfrom)而 blocking IO 只 调用了一个系统调用(recvfrom)。但是用select 的优势在于它可以同时处理多个connection。 所以如果处理的连接数不是很高的话使用 select/epoll的web server不一定比使用multi-threading blocking IO的web server性能更好可能延迟还更大。select/epoll的优势 并不是对于单个连接能处理得更快而是在于能处理更多的连接。
4、Linux下的IO复用编程
selectpollepoll 都是IO多路复用的机制。I/O多路复用就是通过一种机制一个进程可以监视多个描述符一旦某个描述符就绪一般是读就绪或者写就绪能够通知程序 进行相应的读写操作。但selectpollepoll 本质上都是同步I/O因为他们都需要在读写事 件就绪后自己负责进行读写并等待读写完成。