摘要: zero-copy技术 Linux网络IO数据传输过程图 整个操作过程中,做了四次用户态和内核态的状态切换,数据从网卡copy到内核缓冲区,再从内核缓冲区copy到user-space;写入时从user-space copy到内核缓冲区,再从内核缓冲区copy到硬盘设备。做了太多的无用功。 ZERO 阅读全文
posted @ 2022-11-27 15:01 fenngz 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 网络IO 先确定一下范围,我们讨论的都是网络IO,现阶段计算机早已经从CPU密集型转换成网络IO密集型,所以网络io的类型对于服务响应而言更重要。 五种IO模型 依据Unix的IO分类,网络IO分为五类 阻塞IO(BlockingIO 非阻塞IO(Non-Blocking IO IO多路复用( IO 阅读全文
posted @ 2022-11-26 17:19 fenngz 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 内核态和用户态 我们开发的服务代码,都是基于操作系统抽象提供的功能接口,进而操作相应的硬件资源。而硬件资源对于安全性要求非常高,所以对于安全性和系统稳定性而言,需要划定不同的应用程序运行级别。 Intel对于CPU的权限划分了四个等级0 ~ 3,linux采用了其中的0和2这两个等级。运行在0级别的 阅读全文
posted @ 2022-11-25 23:21 fenngz 阅读(319) 评论(1) 推荐(0) 编辑
摘要: 一:什么时候出现? 当我们用迭代器循环list的时候,在其中用list的方法新增/删除元素,就会出现这个错误。 二:为什么会出这个错误? 如上图所示,运行代码就会有这个错误,我们看一下堆栈。 可以看到,是在ArrayList里面的Itr内部类里的checkForModification()方法里,抛 阅读全文
posted @ 2019-05-24 16:38 fenngz 阅读(461) 评论(0) 推荐(0) 编辑
摘要: 一:是什么 java的自动拆装箱,是从jdk1.5之后被引入的,java中的类型分为基本类型和引用类型,而自动拆装箱,可以让基本类型和对应的包装类,无缝转换。先拿最基本的来看。 二:为什么 先说结论:自动拆装箱是编译器的功劳,相当于一个语法糖,在编译成class字节码文件期间,编译器解语法糖,变成正 阅读全文
posted @ 2019-03-02 22:13 fenngz 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 一.什么是lambda? 在Java中,我们可以将一个值赋值给一个Java变量。 但是,我们可以将一块代码或者一个方法赋值给一个Java变量么(类似于javascript那样给方法取名字)? 以上操作,在Java8之前是不能做到的,在8之后,使用lambda表达式的特性,就可以做的到了。但是上面的代 阅读全文
posted @ 2018-10-17 13:55 fenngz 阅读(167) 评论(0) 推荐(0) 编辑