木千
这个作者很懒,什么都没留下…
展开
-
高并发服务器学习笔记之一:客户端
写在前面:学习本系列需要具备网络基础、socket编程、多进程、多线程等前置知识,如果您对以上前置知识不怎么了解,请先去学习以上前置知识后再来阅读本文,废话不多说我们开始,完整代码戳这里我们做一个服务简单一点的服务器,客户端先向服务端发送一个字符串,然后等待服务端返回的消息,循环十次后客户端断开连接;服务端等待客户端发来的消息,每收到一条消息,就向该客户端返回一条消息。首先,...原创 2018-06-22 11:50:19 · 11788 阅读 · 0 评论 -
高并发服务器学习笔记之二:单一迭代模型
这是最简单的一种服务器模型,简单到实际开发中基本就不怎么能见到,其工作模式就是在一个死循环里不停的accept,如果有客户端接入,就进入一个子循环处理客户端的请求,直到客户端断开连接为止,然后再阻塞在accept,等待下一个客户端的接入,下面直接上代码,完整代码戳这里#include <stdio.h>#include <stdlib.h>#incl...原创 2018-06-22 14:21:30 · 11460 阅读 · 0 评论 -
高并发服务器学习笔记之三:多进程模型
该模型是在单一迭代模型的基础上的改进,父进程只在一个死循环里进行accept,当一个客户端接入时,父进程会fork一个子进程,然后父进程关闭该连接的socket,并继续accept,等待下一个客户端接入,子进程可以关闭监听socket,然后去处理客户端请求,处理结束后关闭连接socket,结束自身进程,完整代码戳这里#include <stdio.h>#inclu...原创 2018-06-22 14:37:56 · 11767 阅读 · 0 评论 -
高并发服务器学习笔记之四:多线程模型
该模型和多进程模型的思想类似,只是把进程换成了线程,因为线程的创建比进程创建开销小。但这并不是说多线程就一定比多进程优秀,进程和线程都有各自的优缺点,具体请自行查阅线程和进程相关的内容,完整代码戳这里#include <stdio.h>#include <stdlib.h>#include <string.h>#include <...原创 2018-06-22 14:47:15 · 11557 阅读 · 0 评论 -
高并发服务器学习笔记之五:线程池模型
对于多线程模型,假设某一时刻,突然涌入大量的客户端请求,超过了系统创建的上限,如果程序处理的不好很容易把服务器搞挂掉。而且虽然线程的创建比进程的创建开销要小,但还是有一定的开销的。那么,我们能不能想个办法,既能控制住线程的数量使其不要超过系统的上限,又能减少线程创建的开销呢?于是乎就有了线程池的出现。线程池的想法是,在程序启动后,先创建一定数量的线程,每个线程都不停的看任务队列是否有任务发生,...原创 2018-06-22 15:05:10 · 11520 阅读 · 0 评论 -
高并发服务器学习笔记之六:异步IO——select模型
前面介绍的都是阻塞IO,又称同步IO,系统默认的IO操作都是同步的,即每次都阻塞在文件读写上,如果没有数据到来程序就阻塞在那,完全靠多线程和多进程实现并发。今天我们开学习非阻塞IO,又称异步IO,在单一线程中实现并发。异步IO的大概的思想是,我们先准备一个文件监控集,将我们想要监控的文件描述符添加到监控集中,然后循环监控该监控集中的文件描述符,当某个或某几个文件有数据到来就结束循环去处理,处理...原创 2018-06-22 15:50:37 · 12309 阅读 · 1 评论 -
高并发服务器学习笔记之七:异步IO——poll模型
poll模型和select模型很相似。两者间的主要区别在于我们要如何指定待检查的文件描述符。在select中,我们提供三个集合,在每个集合中标明我们感兴趣的文件描述符。而在poll中我们提供一列文件描述符,并在每个文件描述符上标明我们感兴趣的事件,完整代码戳这里,用到的系统调用如下#include <poll.h>int poll(struct pollfd *f...原创 2018-06-22 16:10:28 · 11468 阅读 · 0 评论 -
高并发服务器学习笔记之八:异步IO——epoll模型
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。目前e...原创 2018-06-22 16:28:57 · 12498 阅读 · 0 评论 -
高并发服务器学习笔记之九:多进程PreForking模型
采用 PreForking 模型可以对子进程的数量进行了限制。PreForking 是通过预先产生多个子进程,共同对服务器套接字进行竞争性的 accept,当一个连接到来时,每个子进程都有机会拿到这个连接,但是最终只会有一个进程能 accept 成功返回拿到连接。子进程拿到连接后,进程内部可以继续使用单线程或者多线程同步的形式对连接进行处理,完整代码戳这里#include &l...原创 2018-06-22 16:36:23 · 11500 阅读 · 0 评论 -
高并发服务器学习笔记之十:PreForking+epoll
这个就不多说了,各种模型的一种综合应用,最终目的就是尽一切手段去压榨服务器资源,完整代码戳这里#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <signal.h>#include <u...原创 2018-06-26 16:31:07 · 11308 阅读 · 0 评论 -
高并发服务器学习笔记之十一:集群架构
集群架构是用一台发现服务器加多台业务服务器的模式。业务服务器首先向发现服务器注册自己,将自己的IP和端口号告诉发现服务器。客户端连接的时候,不是直接连接业务服务器,而是先向发现服务器请求一个业务服务器,发现服务器接收到客户端的请求后会在已注册的业务服务器中选择一台最优质的发送给客户端,客户端拿到后再去连接相应的业务服务器处理业务。本例和之前简单发送几个字符串相比,通信格式稍微复杂一些。首先是公...原创 2018-06-26 17:06:38 · 12058 阅读 · 0 评论 -
高并发服务器学习笔记之十二:分布式架构
简介流量分流业务分流集群和分布式的区别与联系示例程序RPC协议客户端加法服务器乘法服务器小结简介在使用多台设备处理海量数据的 时候,主要有两种方案:流量分流和业务分流。流量分流流量分流也就是我们常说的集群架构,这里不细说,可以看一下我之前的文档:高并发服务器学习笔记之十一:集群架构业务分流业务分流也就是我们常说的分布式架构,是今天的主要内容。一个完成的系统,是由多个业务组成,业务之...原创 2019-04-29 11:17:19 · 11876 阅读 · 0 评论