随笔分类 -  高性能服务器编程

摘要:注意事项:除Direct I/O,与磁盘相关的文件的读写都有使用到Page cache技术。 Netty、Kafka和Mysql等开源组件都用到了零拷贝这个核心技术。 1、数据的四次拷贝和四次上下文切换 很用应用程序在面临客户端请求时,可以等价为进行如下的系统调用: 1 File.read(file 阅读全文
posted @ 2022-05-05 13:08 钟齐峰 阅读(520) 评论(0) 推荐(0) 编辑
摘要:1、原因 掌握并发编程技术,利用多核处理来提升软件项目的性能是软件工程师一项基本技能。本文以c++语言为例,探索如何进行并发编程。内容涉及C++11,C++14以及C++17的主要内容。 测试环境:MacBook Pro ,处理器 M1, 编译器 gcc ,IDE xcode。 2、并发与并行 Er 阅读全文
posted @ 2022-04-17 13:43 钟齐峰 阅读(139) 评论(0) 推荐(0) 编辑
摘要:上一文介绍中,我们详述了网络数据包的接收和发送过程,并通过介绍5中IO模型了解了内核是如何读取网络数据并通知给用户线程的。 前面的内容都是以内核空间的视角来剖析网络数据的收发模型,本小节我们站在用户空间的视角来看一下如何对网络数据进行收发。 相对内核来讲,用户空间的IO线程模型相对简单一些。这些用户 阅读全文
posted @ 2022-03-20 16:49 钟齐峰 阅读(219) 评论(0) 推荐(0) 编辑
摘要:在进行网络IO操作时,用什么样的IO默写来读写数据将在很大程度上决定了网络框架的IO性能。所以IO模型的选择是构建一个高性能框架的基础。 在《Unix网络编程》一书中介绍了五种IO模型,阻塞IO,非阻塞IO,IO多路复用、信号驱动IO,异步IO,每一种IO模型的出现都是对前一种的升级优化。 下面分别 阅读全文
posted @ 2022-03-20 12:52 钟齐峰 阅读(314) 评论(0) 推荐(0) 编辑
摘要:在高性能网络架构笔记一中,我们聊完了网络数据的接收和发送。本章我们谈一下易混淆的概念:阻塞与同步,非阻塞与异步。 经过前面对网络数据包接收流程的介绍,在这里我们可以将整个流程总结为两个阶段: 数据准备阶段:在这个阶段,网络数据包到达网卡,通过DMA的方式将数据包拷贝到内存中,然后经过硬中断,软中断, 阅读全文
posted @ 2022-03-06 17:01 钟齐峰 阅读(196) 评论(0) 推荐(0) 编辑
摘要:一、网络收包流程 1、当网络数据帧通过网络传输到达网卡时,网卡会将网络数据帧通过DMA的方式放到缓冲区RingBuffer中。 RingBuffer时网卡启动的时候分配和初始化的环形缓冲队列。当RingBuffer满的时候,新来的数据包就会被丢弃。我们可通过ifconfig命令查看网卡收发数据包情况 阅读全文
posted @ 2022-03-06 13:02 钟齐峰 阅读(889) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示