- 博客(26)
- 资源 (1)
- 收藏
- 关注
原创 详细说说select poll epoll
(以下内容来自网络和自己的总结,再次感谢网络中的大神们提供的见解)在探索select poll epoll之前我们首先要知道什么叫多路复用:下来探索一下为什么会用到多路复用:首先我们看看一个客户端请求服务器的完整过程。首先,请求过来,要建立连接,然后再接收数据,接收数据后,再发送数据。具体到系统底层,就是读写事件,而当读写事件没有准备好时,必然不可操作,如果不用非
2016-04-24 15:42:30 2393
原创 sendfile函数如何实现零拷贝提高性能
现在流行的 web 服务器里面都提供sendfile 选项用来提高服务器性能,那到底 sendfile 是什么,怎么影响性能的呢?sendfile 实际上是 Linux 2.0+ 以后的推出的一个系统调用,web 服务器可以通过调整自身的配置来决定是否利用 sendfile 这个系统调用。先来看一下不用 sendfile 的传统网络传输过程:char tmp_buf[100
2016-04-24 14:20:39 1487 1
原创 负载均衡
负载均衡,英文名称为LoadBalance,其意思就是将负载(工作任务)进行平衡,分摊到多个操作单元上进行执行(例如Web服务器、FTP服务器等),实现多个服务器共同完成工作任务的目标。负载均衡建立在现有网络结构之上,它提升了服务器的性能、提高了带宽利用率,增强了网络的灵活性和可靠性。经过十年的发展,负载均衡已经成为网络应用的重要设备,甚至成为大型网络应用的核心设备,与基础路由、交换设备市场并驾齐
2016-04-27 14:52:38 470
原创 四.两种高效的并发模式
首先进程的出现就是由于程序在遇到要跳转执行其他程序而导致寄存器被污染而形成程序执行状态的不可再现性。进程的出现使得程序交替执行成为可能,这就是所谓的并发, 并行就是在多个逻辑处理单元中同一时刻执行。有时候也不要过于盲目的使用多进程或者多线程来实现并发,尤其在服务器编程的时候,因为如果程序是计算密集型的话,过多的上下文切换陷入内核会导致cpu忙于进行上下文切换而没有做一些我么认为有用的事,使
2016-04-26 22:21:20 785
原创 一.服务器编程框架
IO处理单元:单服务器中用于等待或者接受客户端的连接,接受客户端的数据,将服务器的响应数据传给客户端。有时候也不接受数据的读写只是将数据发生的事件交给逻辑单元(进程线程)处理。(与nginx的master-worker进程的方式有点类似); 服务器集群IO处理可以使用一个专门的接入服务器实现反向代理和负载均衡,此时后边的逻辑单位就是各种的逻辑服务器,可能
2016-04-26 20:28:44 509
原创 输出 0----N 的全排列
对于这种全排列我们首先思考是将其中的一个固定住后边的进行变化,再将其中的两个定住后边的变化直接到没有数据,之后再将第二个和第一个交换第二个作为第一个,再重复这个变化,直到所有的数据都成为过第一个来点实际的例子 比如 对于“abc”这三个字母的全排列: 首先将a固定住 bc进行变化 就是 abc acb 之后恢复原来的abc 再将a和b交换 就是 bac bca 之后
2016-04-18 22:15:34 1009
原创 Nginx探索五
为了提高性能,nginx肯定会自己实现管理资源的数据结构,下来就来看吧ngx_pool_t(100%)ngx_pool_t是一个非常重要的数据结构,在很多重要的场合都有使用,很多重要的数据结构也都在使用它。那么它究竟是一个什么东西呢?简单的说,它提供了一种机制,帮助管理一系列的资源(如内存,文件等),使得对这些资源的使用和释放统一进行,免除了使用过程中考虑到对各种各样资源的什么时候释放
2016-04-11 23:41:29 356
原创 Nginx探索四
在探索Nginx中的的基本数据结构之前,我们要思考这样一个问题,为什么,nginx要花这莫大力气搞一个自己的数据结构,用其他的例如STL就可以了嘛,为什么,首先我们知道C语言为什么不能很好作为web服务器的文本处理,因为对字符串的处理太差,所以,一个追求性能极致的nginx肯定会在这个方面上下功夫来提高性能。nginx数据结构nginx的作者为追求极致的高效,自己实现了很多颇具特色的n
2016-04-11 22:46:36 472
原创 Nginx探索三
这次探索一下http 请求request这节我们讲request,在nginx中我们指的是http请求,具体到nginx中的数据结构是ngx_http_request_t。ngx_http_request_t是对一个http请求的封装。 我们知道,一个http请求,包含请求行、请求头、请求体、响应行、响应头、响应体。http请求是典型的请求-响应类型的的网络协议,而http是文
2016-04-11 22:20:30 844
原创 Nginx探索二
今天来谈谈nginx的连接connection在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件。利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比如,建立连接,发送与接受数据等。而nginx中的http请求的处理就是建立在connection之上的,所以nginx不仅可以作为一个web服
2016-04-11 21:50:31 322
转载 STL map/multimap 常用函数
map/multimap 使用map/multimap之前要加入头文件#include,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。map和multimap内部的数据结构也是平衡二叉树。 map和multimap根据元素的key自动对元素进行排序
2016-04-10 22:41:35 679
转载 STL set/multiset 常用函数
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]集合使用set或multiset之前,必须加入头文件Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。sets和multiset内部以平衡二叉树实现1. 常用函数1) 构造函数和析构函数
2016-04-10 22:22:40 569
转载 STL deque常用函数
deque函数:deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。(1) 构造函数deque():创建一个空dequedeque(int nSize):创建一个deque,元素个
2016-04-10 15:15:23 551
转载 STL list常用函数
相对于vector容器的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。常用函数(1) 构造函数list c:创建一个空的listlist c1(c2):复制另一个同类型元素的listlistc(n)
2016-04-10 14:59:02 785
转载 STL vector常用函数
Constructors 构造函数Operators 对vector进行赋值或比较assign() 对Vector中的元素赋值at() 返回指定位置的元素back() 返回最末一个元素begin() 返回第一个元素的迭代器capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)clear() 清空所有元素empty()判断Vector是否
2016-04-10 14:51:43 1237
转载 如何熟悉一个开源项目?
你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。2.阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至
2016-04-08 16:58:28 519
转载 我是一个线程
我是一个线程,我一出生就被编了个号: 0x3704,然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900待的时间比较长, 他带着沧桑的口气对我说: “我们线程的宿命就是处理包裹。把包裹处理完以后还得马上回到这里,否则可能永远回不来了。” 我一脸懵懂,包裹,什么包裹? “不要着急,马上你就会明白了, 我们这里是不养闲人的。” 果然
2016-04-07 20:35:41 469
原创 笔试练习四
第一题:最长回文子序列题目思想大概是这样:cabbeaf:回文子序列有:c,a,aa,bb,,aba,abba,e,f,最长的就是abba,所以输出长度为4#include #include #include int dp[1000][1000];using namespace std;int main(){//思路就是求这个原字符串和它反转字符串的最长公共子序列 stri
2016-04-06 23:06:10 247
原创 笔试练习三
一.字符串的反转 示例: I love C++ 反转之后是 C++ love I 尽量的减少空间复杂度和事件复杂度思路:先将每个单词进行反转再进行整体反转局部反转:I evol ++C 全部反转:C++ love Ivoid Reverse_char(char str[]){ if (str == NULL)
2016-04-06 18:09:43 407
原创 超简单的大小写字符转换函数
void BigtoSmall(){ char a; cin >> a; char b = a | 0x20; cout << (char)b << endl;}void SmalltoBig(){ char a; cin >> a; char b = a & ~ 0x20; cout << (char)b << endl;}int main(){ Bigto
2016-04-06 10:04:39 1202
原创 STL string的常用函数
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常stri
2016-04-04 17:00:10 3644
原创 指针和引用的区别
看着很多人对指针和引用都模糊不清今天我自己探索了一下啊 ......................... 引用和指针都是地址的概念,引用是一个内存对象的别名,指针指向一个内存对象,保存了这个对象的内存地址。 区别: 1.引用不能为空,即不存在对空对象的引用,指针可以为空,指向空对象。 2.引用必须初始化,指定对哪个对象的引用,指针不需要。 3.引
2016-04-04 16:10:35 557
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人