linux高性能服务器编程书本总结
目录
目录分析
第一篇从 1-4章节主要是介绍 计算机网络基础知识和 TCP/IP模型
第二篇 核心篇 5 章到 15 章节
5-6章节 主要介绍 套接字编程API的使用和介绍
7章 是linux 服务器方面的一个规范操作
8-9 服务器的架构模式 --也是本书最重要的章节 8是内核
10章 信号
11章定时器
12章 libevent 开源库
13-14 多进程线程编程开发
15章 进程池线程池
第三篇 高性能服务器优化监控 介绍了一个linux 下的工具和小技巧
这本书是我在上周面试 2月25号-28号之间看的,早上面试下午看书,从书本中学到的东西马上就在面试官面前卖弄,输入输出,让我感觉自己的收获还是挺大的。
看书小技巧:首先拿到一本书,看出版社看序言-一般作者或出版社会大概介绍本书,让后是书本目录,花个几分钟全书浏览一般,目的是为大致再了解一下本书,是否你有兴趣读,是否可以阅读有意义?让后再花一天时间将本书从头阅读一遍,遇到重点章节记录一下,难以理解的记住某一个章节,让后继续把这本书看完,到时候拿出具体都重点章节和难点章节啃掉。
---读书的方法可以看《如何阅读一本书》
目录分析
第一篇从 1-4章节主要是介绍 计算机网络基础知识和 TCP/IP模型
- ARP 原理 DNS 原理
- IP协议 特点:动力层,为上层提供无状态,无连接,不可靠服务。
- IP 头 --通常20字节
- 介绍 IP 数据报路由与转发
- IP路由 是为了找到目标机器的路径 --了解这个前提要了解IP模块工作流程
- 传输层 tcp
- tcp头部 --40个固定字节,用来连接和控制
- 三次握手四次挥手
- 半关闭状态 某一方不再发送,但是允许继续接受对方数据.
- 状态转移过程 -- 两段状态变化的过程。
-
- 复位报文手段 作用也就是通知对方关闭连接或者重新连接
- 访问不存在的端口 --什么情况下都可以收到复位报文段
- 异常终止连接
- 一旦tcp发送了复位报文,发送端所等待的排队数据都被丢弃,可以使用 SO_LINGER来发送复位报文段,终止一个连接。
- 处理半打开连接 就是对方网络故障没有收到结束报文 网络故障等一些原因,但是服务器以为对方关闭成为半打开,可以写数据时发一个复位报文,就可以被关闭了
- 复位报文手段 作用也就是通知对方关闭连接或者重新连接
- 数据流 就是tcp与应用程序之间的数据通讯分析
- 交互数据 字节少,实时性高。
- nagle算法优化 将多个小的数据报文一起发了,减少小数据报文
- 成块数据 例如ftp
- 外带数据 用于迅速告诉对方本端发生的重要事件。
- 所以外带数据的优先级最高,无需排队,udp 没有该数据,tcp 也不是真正意义上的,只是利用紧急指针的两个字段,该缓存1字节,上层如何没有及时拿出下次就覆盖了。
- 交互数据 字节少,实时性高。
- 数据流控制 超时重传和拥塞控制
- tcp 超时重传 也就是发生异常网络情况下
- tcp 模块维护的 重传定会器--如果对方没有应答那么就启动,传多少次? 经过分析 重传五次 0.2s 0.4 0.8 1.6 3.2s每次重传加倍,五次后由IP和ARP接管。
- 拥塞控制
- tcp 重要任务 提高网络利用率降低丢包,保证网络资源对数据流的公平性,这就是拥塞控制。
- 慢启动
- 拥塞避免
- 快速重传
- 快速恢复
- tcp 重要任务 提高网络利用率降低丢包,保证网络资源对数据流的公平性,这就是拥塞控制。
- tcp 超时重传 也就是发生异常网络情况下
-- 这里呢 也只是简单的介绍一下书,要看具体详情 网络这一块 可以看tcp/ip核心3卷
第二篇 核心篇 5 章到 15 章节
5-6章节 主要介绍 套接字编程API的使用和介绍
- socket地址API
- 主机字节序和网络字节序(大端:高位字节存储低位,低位字节存储高位,主机字节序反之)
char union_bytes[sizeof(short)];if (sizeof(short) == 2) { if (test.union_bytes[0] == 1 && test.union_bytes[1] == 2) cout << "big endian" << endl; else if (test.union_bytes[0] == 2 && test.union_bytes[1] == 1) cout << "little endian" << endl; } ---代码段
- 套接字地址族 含 地址族(IPV4,6) 端口号(网络字节序) IPV4地址结构体
- 创建socket socket 它是一个可读可写可控制,可开关的文件描述符。
- 命名socket bind 函数来做一个地址族绑定具体某一个socket
- 监听socket listen函数 创建一个监听队列来存放待处理的客户连接。
- 接受连接 accept
- 测试 :如果在accept 接受过程中客户端断开了,会不会影响到该函数的调用呢? 经过测试答案是不会的,它只是从队列中取出来数据而已。
- 发送请求 connect 客户端与服务器主动发出连接
- 关闭连接 close
- 主机字节序和网络字节序(大端:高位字节存储低位,低位字节存储高位,主机字节序反之)
- 数据读写
- tcp 数据写
- recv
- send
- udp数据读写
- recvfrom
- sendto
- 通用读写函数
- recvmsg
- sendmsg
- 外带标记 sockatmark
- 地址信息函数 获取本端的socket地址 获取远端的 getsockname getpeername
- socket 选项 getsocket setsocket --这个是专门用来设置socket文件描述符的属性,而fcntl 是POSIX方法。具体了解https://blog.csdn.net/swartz_lubel/article/details/79574472 该函数更多选项
- tcp 数据写
- 网络信息API
- 根据主机名获取主机完整信息,根据ip 获取完整信息
- 根据名称获取某个服务的完整信息,根据端口获取某个服务完整信息 -- 具体函数就不列举出来了,只是告诉有这个功能
- 高级io 函数-----------------------
- pipe 管道,做进程间通讯
- dup dup2 函数 把标准输出重定向到另一个文件或者其它的。
- readv 和 writev 函数 将分散在内存块中的数据一并写入文件描述符中。
- sendfile 两个文件描述符之间直接传递数据,避免内核和用户缓冲区,提高效率。
- mmap munmap 用于申请一块内存,该内存作为进程间通讯的共享内存。
- splice 函数 用于连个文件描述符之间数据移动 ,零拷贝就是不消耗什么效率
- tee 两文件描述符之间复制数据
- fcntl 函数 提供对文件描述符的各种控制
- 复制文件描述符
- 设置获取文件描述符标志
- 设置获取它们状态
- 管理信号
7章 是linux 服务器方面的一个规范操作
- 系统日志 服务器的维护和调试都需要这个东西,系统也提供了 一些函数 rsyslogd
- 有时候不能以root 权限来操作,因为权限太大,所以应该使用用户 代码中做用户判断呢?
- 系统资源限制
- 物理限制 cpu 内存数
- 服务器程序后台化 就是以守护进程的方式运行
8-9 服务器的架构模式 --也是本书最重要的章节 8是内核
- 服务器编程框架
模块 单个服务器程序 服务器集群 I/O处理单元 处理客户连接,读写网络数据 作为接入服务器实现负载均衡 逻辑单元 业务进程或现场 逻辑服务器 存储单元 本地数据库或文件缓存 数据库服务器 请求队列 各个单元之间通讯方法 各个服务器之间永远tcp连接 - IO模型
- 将文件描述符设置为非阻塞 fcntl 设置为F_SETFL
IO模型 读写操作和阻塞阶段 阻塞IO 程序阻塞利于读写函数 IO复用 程序阻塞与IO复用系统调用,可以同时监听多个IO事件 SIGIO信号 信号触发读写就绪事件,用户程序执行读写操作,程序不阻塞 异步IO 内核执行写操作并触发读写完成事件。
- 两种高效事件处理模式
- Reactor
- 负责监听文件描述符是否具有事件发生,如果有事件则立即通知该事件的工作线程。 select
- 详细介绍https://www.cnblogs.com/doit8791/p/7461479.html
- Proactor 模式将所有IO操作都交给主线程和内核来处理,工作线程仅仅只负责处理业务逻辑
- Reactor
- 逻辑单元
- IO模型
10章 信号
11章定时器
12章 libevent 开源库
13-14 多进程线程编程开发
15章 进程池线程池
第三篇 高性能服务器优化监控 介绍了一个linux 下的工具和小技巧
linux高性能服务器编程书本总结相关推荐
- 《Linux高性能服务器编程》——导读
前 言 为什么要写这本书 目前国内计算机书籍的一个明显弊病就是内容宽泛而空洞.很多书籍长篇大论,恨不得囊括所有最新的技术,但连一个最基本的技术细节也无法解释清楚.有些书籍给读者展现的是网络上随处可见的 ...
- 《Linux高性能服务器编程》学习笔记
<Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...
- Linux 高性能服务器编程——多线程编程
问题聚焦: 在简单地介绍线程的基本知识之后,主要讨论三个方面的内容: 1 创建线程和结束线程: 2 读取和设置线程属性: 3 线程同步方式:POSIX信号量,互斥锁和条 ...
- 【Todo】【读书笔记】Linux高性能服务器编程
在读 /Users/baidu/Documents/Data/Interview/服务器-检索端/<Linux高性能服务器编程.pdf> 其实之前读过,要面试了,需要温习. P260 So ...
- Linux高性能服务器编程——书籍阅读笔记
目录 前言 正文 第一章 1. 零拷贝函数 2. TCP/IP协议族 3. OSPF 4. ARP协议 5. RARP 6. ICMP协议 7. TCP协议 8. UDP协议 9. 封装 第四章 TC ...
- linux高性能服务器编程第八章(高性能服务器程序框架)
C/S模型 传统C/S,一端作为客户端,一端作为服务器,这里不做多介绍. P2P模型 peer 2 peer ,每台机器使用服务的同时也提供服务,通俗的讲,没有绝对客户端和服务端的概念,当下云计算的模 ...
- 强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍
目录 第1章 TCP/IP协议 1.1 TCP/IP协议族体系结构以及主要协议 1.1.1 数据链路层 1.1.2 网络层 1.1.3 传输层 1.1.4 应用层 1.2 封装 1.3 分用 1.5 ...
- linux高性能服务器编程学习总结(二)
第三章 TCP详解 TCP的连接是一对一的,所以基于多播和广播的应用程序不能使用TCP服务,而UDP非常适合广播和多播.发送端应用连续执行多次写操作,TCP模块将数据放入TCP缓冲区.TRP模块真正开 ...
- Linux高性能服务器编程 第5章 Linux网络编程基础API
5.1 socket 地址 API 现代CPU的累加器一次都能装载(至少)4 字节(这里考虑32位机,下同),即一个整 数.那么这4 字节在内存中排列的顺序将影响它被累加器装载成的整数的值.这就是字节 ...
最新文章
- Eclipse+Maven配置
- Java面向对象--小游戏2
- TextView实现自动滚动滚动.
- dotConnect for Oracle控件免费下载及使用方法
- 手把手教你用C语言画“心”!
- 《scikit-learn》随机森林之深入学习
- CentOS7下初始化PostgreSQL
- stm32以中断方式扫描矩阵键盘
- c语言中四种简单的数组排序
- 陇原战“疫“2021网络安全大赛 Re
- Mac eclipse下载地址 Java开发
- Finclip小程序宿主环境与微信小程序宿主环境
- macOs 静默安装dmg文件
- Layui使用入门教程
- 在线教育平台搭建的几种方案
- Python笔记 | 数据筛选
- SQL SERVER使用STUFF函数拼接
- css浮动布局自适应,CSS 几种常用自适应布局
- 口袋妖怪 java_简单的Java口袋妖怪扑灭模拟器
- E4A MPChart折线图 曲线图
热门文章
- 达人评测 i5-1155g7和i5-1235u选哪个 i51155g7和1235u差距
- Java获取两个日期之间的工作日天数
- Elasticsearch学习--查询(prefix、wildcard、regexp、fuzzy)
- DouPHP模块化企业网站管理系统源码 v1.6
- 用KDL在C++中控制UR5机器人的TCP位置——逆向运动学解释
- linux 目录中的文件和子目录生成jar包文件的方法
- deepin升级到20.2,开机显示deepin LOGO之后屏幕黑屏解决办法
- setHeader方法的参数说明
- Rsync命令参数以及配置使用
- 屏幕录制和编辑神器ScreenFlow轻松上手