
《Linux 高性能服务器编程》总结
文章平均质量分 95
《Linux 高性能服务器编程》主要参考一书,深入了解Linux环境下高性能服务器的开发技术。本专栏涵盖多线程编程、网络通信、I/O模型、性能优化等关键知识点,通过详实的案例和代码讲解,为读者提供实用的编程技巧和优化方法,帮助提升服务器程序的性能与稳定性。
红茶川
这个作者很懒,什么都没留下…
展开
-
《Linux 高性能服务器编程》总结——专栏介绍
专栏介绍原创 2024-11-08 15:34:43 · 1349 阅读 · 2 评论 -
TinyWebServer 配置安装
项目TinyWebserver配置和使用。原创 2024-08-16 12:58:50 · 735 阅读 · 0 评论 -
1. IP协议
IP协议介绍原创 2024-08-16 13:08:22 · 957 阅读 · 0 评论 -
2. TCP协议
TCP协议介绍。原创 2024-08-16 13:12:10 · 1479 阅读 · 0 评论 -
3. 访问一个网页的全过程
整个访问过程中的交互细节是什么?浏览器首先检查本地缓存是否已经存储了这个 URL 对应的 IP 地址。如果没有缓存或缓存过期,浏览器将发起一个 DNS(域名系统)查询,以将域名()转换为服务器的 IP 地址。这通常涉及向本地 DNS 服务器或更高级别的 DNS 服务器查询。(本地域名服务器、根域名服务器、顶级域名服务器、权限域名服务器),查询方式主要是递归和迭代相结合的方式。客户端浏览器收到解析结果后,会将其域名以及对应的IP地址缓存到DNS缓存和hosts文件中。原创 2024-08-16 13:24:17 · 917 阅读 · 0 评论 -
4. Linux网络编程基础API
还是给我的语雀文档打个广告:我的文章都是先在语雀里记录的,然后再同步发送到优快云上,有些格式问题实在是懒得改了,可能会导致大家看的不舒服,建议有需要的大家可以看看我的原文:语雀。原创 2024-08-16 20:31:03 · 1089 阅读 · 0 评论 -
5. 高级 I/O 函数
char a[3];是一个存储字符的数组。char* a[3];是一个存储字符指针的数组,通常用于存储字符串的指针。原创 2024-08-19 22:55:45 · 1102 阅读 · 0 评论 -
6. Linux服务器程序规范
UID:标识用户身份,决定用户本身的所有权限。EUID:用于实际判断用户的权限,可能与 UID 不同。GID:标识用户所属的组,决定用户组的权限。EGID:用于实际判断用户的组权限,可能与 GID 不同。在权限管理中,UID 和 GID 决定了用户和组的基本身份和权限,而 EUID 和 EGID 决定了用户在特定情境下(如执行带有setuid或setgid标志的程序时)所拥有的实际权限。这些标识符是 UNIX 权限模型的重要组成部分,用于确保系统资源的安全访问和管理。原创 2024-08-20 16:47:45 · 1146 阅读 · 0 评论 -
7. 高性能服务器程序框架
一书中,把这一章节作为全书的核心,同时作为后续章节的总览。这也意味着我们在经历了前置知识的学习后,正式进入了 Web 服务器项目的核心部分!TCP 三次握手、四次挥手,流量控制、拥塞控制等。socket 的创建、绑定、监听、连接等。文件描述符、管道、readvwritev函数等。进程 PID,用户 UID,组 GID,会话 ID 等。原创 2024-08-21 17:22:30 · 1537 阅读 · 0 评论 -
8. I/O 复用
I/O 复用使得程序能够同时监听多个文件描述符,从而提高程序的性能。I/O 复用本身是阻塞的。Linux 下实现 I/O 复用的系统调用主要有selectpoll和epoll。原创 2024-08-23 21:10:48 · 1334 阅读 · 0 评论 -
9. 信号
信号是由用户、系统、进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。Linux信号可由以下条件产生:对于前台进程,用户可通过输入特殊终端字符来给它发送信号,如输入Ctrl+C通常会给进程发送一个中断信号。系统异常。如浮点异常或非法内存段访问。系统状态变化。如alarm定时器到期将引起SIGALRM信号。运行kill命令或调用kill函数。服务器程序必须处理(或至少忽略)一些常见信号,以免异常终止。原创 2024-08-24 18:31:51 · 1142 阅读 · 0 评论 -
10. 定时器
网络程序需要处理定时事件,如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,有效地组织这些定时事件,使其在预期的时间被触发且不影响服务器的主要逻辑,对于服务器的性能有至关重要的影响。为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,如链表、排序链表、时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。本章主要讨论两种高效的管理定时器的容器:时间轮和时间堆。原创 2024-08-27 14:23:04 · 869 阅读 · 0 评论 -
11. 高性能I/O框架库Libevent
I/O框架库以库函数的形式,封装了较为底层的系统调用,给应用程序提供了一组更便于使用的接口。各种I/O框架库的实现基本原理相似,要么以Reactor模式实现,要么以Proactor模式实现,要么同时以这两种模式实现。例如,基于Reactor模式的I/O框架库包含以下组件:句柄(Handle)、事件多路分发器(EventDemultiplexer)、事件处理器(EventHandler)、具体的事件处理器(ConcreteEventHandler)、Reactor。原创 2024-08-27 20:39:31 · 1103 阅读 · 1 评论 -
12. 多进程编程
本章讨论Linux多进程编程的以下内容:复制进程映像的fork系统调用和替换进程映像的exec系列系统调用。僵尸进程以及如何避免僵尸进程。进程间通信(Inter Process Communication,IPC)最简单的方式:管道。三种System V进程间通信方式:信号量、消息队列、共享内存。它们是由AT&T System V2版本的UNIX引入的,所以统称为System V IPC。在进程间传递文件描述符的通用方法:通过UNIX本地域socket传递特殊的辅助数据。(关于辅助数据原创 2024-08-28 19:32:42 · 1267 阅读 · 0 评论 -
13. 多线程编程
进程:进程是操作系统进行资源分配和调度的基本单位,是程序的一次执行过程。它是系统进行资源分配和调度的一个独立单位。每个进程都有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据。线程:线程是进程中的实际运行单位,是进程中的一个单一顺序控制流,也被称为轻量级进程(LWP)。一个进程可以包含多个线程,所有线程共享进程的资源,如内存和文件描述符。线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身份,线程可分为内核线程和用户线程。原创 2024-08-28 22:53:53 · 952 阅读 · 0 评论 -
14. 进程池和线程池
之前的章节中,我们通过动态创建子进程或子线程来实现并发服务器,这样做的缺点有:+ 动态创建进程或线程比较耗时,这将导致较慢的客户响应。+ 动态创建的子进程或子线程通常只用来为一个客户服务(除非我们做特殊处理),这将导致系统上产生大量的细微进程或线程,进程或线程间的切换将消耗大量CPU时间。+ 动态创建的子进程是当前原创 2024-11-08 15:17:50 · 700 阅读 · 0 评论 -
15. 服务器调制、调试和测试
主要包括:使用 tcpdump 抓包;使用 gdb 调试器;使用压力测试工具,模拟现实世界中的高并发请求,测试服务器在高压状态下的稳定性。原创 2024-09-25 15:15:48 · 968 阅读 · 0 评论