Netty中的零拷贝

最近看了一些netty的文章,对操作系统零拷贝和netty的零拷贝起了点兴趣,于是整理了相关的知识。 操作系统的零拷贝 传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。 操作系统的零拷贝,这种方式需要四次数据拷贝和四次上下文切换: 1. 数据从磁盘读取到内核的read buffer 2. 数据从内核缓冲区拷贝到用户缓冲区 3. 数据从用户缓冲 … 继续阅读

零拷贝

什么是零拷贝 零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,主要就是利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效。 操作系统的零拷贝 非零拷贝的拷贝过程: 零拷贝的拷贝过程: 如何减少数据拷贝的次数呢?一个很明显的着力点就是减少数据在内核空间 … 继续阅读

IO多路复用(multiplexing)

IO多路复用(multiplexing) I/O模型 目前Linux系统中提供了5种IO处理模型: 1. 阻塞IO 传统的IO模型。 2. 非阻塞IO 默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库 3. IO多路复用: 即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Select … 继续阅读

MySQL DAL架构演化

1.优化sql和索引 2.缓存 memcached,redis; 3.读写分离 就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护; 4.分区表 针对分区表做优化,SQL条件中要带上分区条件的列 5.垂直拆分, 将一个大的系统分为多个小的系统,也就是分布式系统; 比如,原来的一个db包含了:user相关业务 … 继续阅读

锁与并发

前言 最近在看锁相关的东西,顺便梳理了一下Java领域的锁。Java里面按锁的轻重,可以分为轻量级锁和重量级锁。这些锁的整理,对理解GC日志也有帮助 锁的状态 锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。 重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。 … 继续阅读

内核态和用户态

虽然以前学操作系统的时候,经常听到内核态和用户态,但是其实因为并不熟悉,这两个概念,于是花了点时间了解和整理了这部分东西。 系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。 用户态和内核态 内核态 那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿呢?控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境供应用 … 继续阅读