多进程编程 多进程编程包含例如以下内容: 复制进程影映像的fork系统调用和替换进程映像的exec系列系统调用. 僵尸进程以及怎样避免僵尸进程 进程间通信(Inter-Process Communication,IPC)最简单的方式:管道 3种进程间通信方式:信号量,消息队列和共享内存 fork系统调用 #include<unistd.h> pid_tfork(void); 该函数的每次都用都返回两次,在父进程中返回的是子进程的PID,在子进程中返回的是0.该返回值是兴许代码推断当前进程是父进…
问题聚焦:     进程是Linux操作系统环境的基础.     本篇讨论以下几个内容,同时也是面试经常被问到的一些问题:     1 复制进程映像的fork系统调用和替换进程映像的exec系列系统调用     2 僵尸进程     3 进程间通信的方式之一:管道     4 3种System V进程通信方式:信号量,消息队列和共享内存 fork系统调用 定义: #include <sys/types.h> #include <unistd.h> pid_t fork( void…
问题聚焦:     核心章节.     服务器一般分为如下三个主要模块:I/O处理单元(四种I/O模型,两种高效事件处理模块),逻辑单元(两种高效并发模式,有效状态机)和存储单元(不讨论). 服务器模型 C/S模型 结构: 特点: 逻辑简单. 工作流程: I/O复用技术:select,同时监听多个客户请求. 优点:适合资源相对集中的场合. 缺点:当访问量过大,可能所有客户都将得到很慢的相应. P2P模型 结构:两种结构 结构b比结构a增加了发现服务器,用于主机之间的互相发现,尽快找到自己需要的资…
问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(socket地址)API,socket基础API,和网络信息API. 套接字API 套接字socket:(ip, port),即IP地址和端口对,唯一地表示了使用该TCP通信的一端. 需要了解:主机字节序和网络字节序. 原因:考虑32位的机器,CPU的累加器一次装载4字节的内容.那么这4字节在内存中的顺…
<Linux高性能服务器编程>:当当网.亚马逊 目录: 第一章:tcp/ip协议族 第二章:ip协议族 第三章:tcp协议详解 第四章:tcp/ip通信案例:访问Internet 第五章:linux网络编程基础API 第六章:高级IO函数 第七章:linux服务器程序规范 第八章:高性能服务器框架 第九章:IO复用 第十章:信号 第十一章:定时器 第十二章:高性能IO框架库libevent 第十三章:多进程编程 第十四章:多线程编程 第十五章:进程池和线程池 第十六章:服务器调制.调试和测试…
前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉.所以为了swoole打下坚实的基础,打算从<linux高性能服务器编程>一书中找到启蒙.在此作为学习总结. 书本架构: 书中 1-4 章节,主要介绍TCP/IP协议族网络知识.以及TCP/IP通信的过程. 书中 5-15章节,主要解析服务器编程的主要方面(概念.模型.函数.实践) 第一章 1.1…
问题聚焦:     在简单地介绍线程的基本知识之后,主要讨论三个方面的内容:    1 创建线程和结束线程:    2 读取和设置线程属性:    3 线程同步方式:POSIX信号量,互斥锁和条件变量. Linux线程概述 线程模型 程序中完成一个独立任务的完整执行序列,即一个可调度的实体. 分为内核线程和用户线程 当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程,可见,内核线程相当于用户线程运行的"容器". 一个进程可以拥有M个内核线程和N个用户线程, M<…
问题聚焦:     前篇提到了I/O处理单元的四种I/O模型.     本篇详细介绍实现这些I/O模型所用到的相关技术.     核心思想:I/O复用 使用情景: 客户端程序要同时处理多个socket. 客户端程序要同时处理用户输入和网络连接. TCP服务器要同时处理监听socket和连接socket,这是使用最多的场合. 服务器要同时处理TCP请求和UDP请求. 服务器要同时监听多个端口或者处理多种服务. 主要技术: select poll epoll select系统调用 作用:     在…
问题聚焦:     除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范.     工欲善其事,必先利其器,这篇主要来探讨服务器程序的一些主要规范. 概览: Linux服务器程序一般以后台程序的形式运行,后台进程又称为守护进程. Linux服务器程序一般以某个专门的非root身份运行. Linux服务器程序通常是可配置的,命令行或者配置文件的形式. Linux服务器程序通常会在启动的时候生成一个PID文件,以记录该后…
问题聚焦:     本节从如下四个方面讨论TCP协议:     TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流     TCP状态转移过程:TCP连接的任意一端都是一个状态机     TCP数据流:两种主要类型:交互数据流,成块数据流     TCP数据流的控制:保证可靠传输和提高网络通信质量,两个方面:超时重传,拥塞控制 1 TCP服务的特点 传输层协议:TCP协议.UDP协议 TCP协议相对于UDP协议的特点:面向连接.字节流和可靠传输.      …
1 IP服务特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. 无状态:IP通信双方不同步传输数据的状态信息,因此IP数据包的发送.传输和接收都是无序的.     缺点:无序,不可靠         优点:简单.高效 不可靠:不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力.发送端(转发端)一旦检测到IP数据包发送失败(如存活时间过长,数据报不正确),就通知上层协议发送失败,而不会试图重传.               因此使用IP服务的上层协议(如…
1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输.     常用协议:ARP协议(地址解析协议),RARP协议(逆地址解析协议)--实现了IP地址和机器物理地址之间的相互转换.     寻址:使用物理地址(MAC地址)寻址一台机器.因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务. 网络层:     职责:数据包的选路和转发.选路:确定两台主机之间的通信路径,对上层协议隐藏…
在读 /Users/baidu/Documents/Data/Interview/服务器-检索端/<Linux高性能服务器编程.pdf> 其实之前读过,要面试了,需要温习. P260 Socket编程接口提供了一个创建全双工管道的系统调用:socketpair.squid服务器程序(见第4章)就是利用了socketpair创建管道.…
记录<Linux高性能服务器编程>书里面讲解到的若干 shell 命令 arp 命令查看ARP高速缓存: [root@VM_0_10_centos heliang]# arp -a ? ( [ether] on eth0 ? ( [ether] on eth0 ? ( [ether] on eth0 所有知名应用层协议使用的端口号可以在  /etc/services  文件中找到 cat /etc/servies tcpdump抓包 tcpdump -i eth0 -ent DNS服务器IP地…
第八章 高性能服务器编程框架 这一章主要介绍服务器的三个主要模块: I/O处理单元.逻辑单元.存储单元.另外服务器的模型有:C/S模型和P2P模型.虽然服务器模型比较多,但是其核心框架都一样,只是在于逻辑处理方面.如下图简单的介绍一台服务器或服务器机群模型的基本框架: 1.I/O模型 I/O处理单元:I/O处理单元是服务器管理客户连接的模块.主要是等待并受理新的客户连接接收客户数据,将服务器响应数据返回给客户端. 逻辑单元:就是一个个进程或者线程.用于处理客户数据,将结果传递给I/O处理单元或者…
很多人学习编程技术一般都通过一本编程语言的入门书籍,然后尝试做一些例子和小项目.但是这些都不能让我们深入的学习很多的编程技巧和高深技术,当然这个时候很多有经验的学习人员就会告诉大家,找一个好的开源软件理解它的设计与实现原理,阅读开源项目的源代码,都知道源码之前了无秘密.我也承认读源码能够快速提高我们的编程能力和编程思维,我也经常研究很多项目的源代码,有些是工作需要,有些是兴趣.但是我今天想说的都不是这些,我想说的是更高一层的学习方案,就是通过自己的实践实现一个开源软件,也许这个开源软件没有任何人…
1. 高性能定时器:时间轮,时间堆 (處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件) 2. 高性能服务器程序框架:(nginx 使用的是基於事件模型,epoll,不阻塞,異步處理) 两种高效的事件处理模式: Reactor模式 Proactor模式 两种高效的并发模式:半同步/半异步模式 领导者/追随者模式 有限状态机 提高服务器性能的其他建议:池(如nginx,在得到一個連接時,會創建ngx_connection_t;  在得到一份請求的時,會創建ngx_request_t; 這…
第五章 Linux网络编程基础api 1.主机字节序和网络字节序 字节序是指整数在内存中保存的顺序.字节序分为大端字节序.小端字节序. 大端字节序:一个整数的高位字节数据存放在内存的低地址处.低位字节存储在内存的高地址处.称为网络字节序. 小端字节序:指整数的高位字节序存储在内存的高地址处.低位字节则存储在内存的低地址处.称为主机字节序. 现代的PC大多数采用小端字节序.当两台使用不同字节序的主机之间进行数据传递时,要判断对方发送过来的数据是否满足当前机器的字节序,如果不满足,则进行数据的转换流…
服务器有三个主要模块: (1)I/O处理单元 (2)逻辑单元 (3)存储单元 1.服务器模型 C/S模型 逻辑:服务器启动后,首先创建一个或多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接. 服务器运行稳定后,客户端就可以调用connect函数向服务器发起连接了. P2P模型 P2P模型使得每台机器在消耗服务的同时也给别人提供服务,这样资源能够充分.自由的共享. 2.服务器编程框架 包含: I/O处理单元  请求队列   逻辑单元  …
socket选项函数 功能:用来读取和设置socket文件描述符属性的方法 函数: #include <sys/scoket.h> int getsockopt ( int sockfd, int level, int option_name, void* option_value, socklen_t* restrict option_len ); int setsockopt ( int sockfd, int level, int option_name, const void* opt…
第九章 I/O复用 I/O复用就是一个线程可以同时监听多个文件描述符,提高程序性能.虽然I/O复用可以同时监听多个文件描述符,但是它本身是阻塞的,如果多个文件描述符准备就绪,如果不采取措施它仍然是串行工作的.所以只能通过多进程或者多线程来处理.linux下实现I/O复用主要使用到 select poll epoll 三种都是IO多路复用的机制: select : 1)当有多个I/O流进来了,它不知道哪一个准备就绪可执行(读.写)所以select 只能采用轮询的方式去访问,所以 select 的时…
第七章 LInux 服务器程序规范 1)linux服务器程序一般以后台进程形式运行.后台进程又称为守护进程,是没有控制终端的,所以不会受到外界的干扰.守护进程的父进程通常是init进程(PID为1的进程).2)linux服务器程序有一套日志系统,大部分后台进程都会在/var/log目录下记录.3)linux服务器程序一般都会以某个专门的非root身份运行,分别拥有自己的运行账户.4)linux服务器程序通常是可配置的,通过配置文件来管理一堆命令.5)linux服务器进程通常情况会在启动的时候生成…
第六章 高级I/O函数 Linux提供了很多高级的I/O函数,它不是基础的I/O函数(open/read) 1.创建文件描述符的函数比如:pipe.dup/dup2函数 2.读写数据的函数比如:readv/writev.sendfile.mmap/munmap.splice 和 tee 函数 3.控制 I/O 行为和属性的函数比如:fcntl 函数 pipe函数可以创建一个管道,管道是一种把两个进程之间的标准输入和输出连接起来的机制.从而可以实现让多进程之间进行通信.pipe创建的管道是单工的,…
第三章 IP协议详解 TCP协议是TCP/IP协议族中的另外一个重要的协议,与IP协议相比,TCP协议更高进应用层.一些重要的socket选项都和TCP协议相关.这一章主要从如下方面学习: 1)TCP头部信息:每一个TCP头部会出现在每一个TCP报文段中 2)TCP状态转移过程:TCP连接的端到端都存在一个状态,从连接到断开都会经历一些状态变迁 3)TCP数据流:TCP数据是基于流的(交互数据流.成块数据流) 4)TCP数据流的控制:TCP的可靠性体现出(超时重传.拥塞控制) 1.TCP和UDP…
Linux服务器程序一般以后台进程形式运行,后台进程又称守护进程.它没有控制终端,不会接收到用户输入.守护进程的父进程通常是init进程(PID为1). Linux服务器程序有一套日志系统 Linux服务器程序一般以某个专门的非root身份运行 Linux服务器程序通常是可配置的 Linux服务器程序通常会在启动的时候生成一个PID文件并存入/var/run目录,以记录该后台进程的PID. Linux服务器程序通常需要考虑系统资源和限制. 1.日志 rsyslogd来处理系统日志…
高级应用一:非阻塞connect connect系统调用的man手册中有如下的一段内容: EINPROGRESS The socket is non-blocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicat…
重定向dup和dup2函数 #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor_one, int file_descriptor_two); dup创建一个新的文件描述符, 此描述符和原有的file_descriptor指向相同的文件.管道或者网络连接. dup返回的文件描述符总是取系统当前可用的最小整数值. dup2函数通过使用参数file_descriptor_two指定新描述符数值,…
第四章 TCP/IP通信案例 HTTP代理服务器的大致工作原理        在HTTP通信链上,客户端和服务器之间通常存在某些中转代理服务器.它们提供对目标资源的中转访问.一个HTTP请求可能被多个代理服务器转发,后面的代理府服务器称为前面服务器的上游服务器.代理服务器安装使用方式和作用分为:正向代理服务器 和 反向代理服务器. 正向代理服务器要求客户端自己设置代理服务器的地址.客户每次请求都将直接发送到代理服务器上,再由代理服务器来请求目标资源.就好比翻墙看国外网站一样. 反向代理服务器是设…
title:用线程池实现的http服务器 从main函数看起 解析ip地址(点分制, 端口号) 设置忽略SIGPIPE信号 初始化线程池,池中创建了8个线程,每个线程对应一个work函数 初始化http逻辑任务处理对象(65535个,为什么需要分配这么多????) 初始化socket socket函数原型 int socket(int af, int type, int protocol); af    AF_INET或者AF_INET6,分别表示IPv4地址或者IPv6地址,或者可以为PF_I…
第二章 IP协议详解 什么是IP协议:IP 协议是TCP/IP协议族的动力,它为上层提供了无状态.无连接.不可靠的服务. IP 头部信息:头部信息会出现在每一个IP数据报上,便于记录IP通信的源端IP地址,目的端IP地址,指导IP分片和重组,以及指定部分通信行为. IP 数据报的路由和转发:除目标机器之外的所有主机和路由器上.它们决定数据报是否应该转发和如何转发. 无状态:即每次的IP数据报发送.传输和接收都是相互独立的,没有上下文关系.缺点:无法处理乱序和重复IP数据报:优点:简单.高效. 无…