[开发前准备]

在进行linux服务器开发之前,必须很清楚地了解所开发的对象需要考虑的相关问题
比如:
功能架构:提供服务的模块体系结构
稳定性:服务器的出core率,内存泄露情况
性能:请求与返回的速度与正确性
负载能力:能同时访问的最大数量和频度

根据不同服务器对象的环境和应用,服务器开发的对应手段相差甚远。比如就客户端连接时间较短却又比较频繁的服务器(例如HTTP服务器)而言,
在可选的服务器结构中,预先派生进/线程的结构就要比并发式结构高效

总之,在开发服务器之前,必须进行完整的服务器开发需求分析,否则一旦你的服务器开发完成而因为效率或者其他某项事物不能满足你的客户,那么很有可能失败!

[服务器让我明白了这件事情]

服务器一般在后台运行,与客户端的交互通过请求和返回两种方式进行通信。
以epoll为例,一个epoll开发的服务器程序,等待着一百万的客户端用户的请求,轮询观察某个时刻是否有客户端发来的请求;排队依次处理发来的请求,并将结果返回给
客户端应用程序。
涉及到几个技术问题:
第一,客户端访问进入epoll轮询队列的优先级是否需要控制。比如甲是我们的vip白金用户,那么,我始终先处理甲发来的请求,不然白金用户要生气的。
第二,极大可能程度上优化处理请求的速度,这是服务器设计的核心业务。
第三,如果客户端请求了这样一个事情:我需要看这一百年来某企业所有的信息,那么我想这个信息量是很大的,也就是现在很热门的大数据大文件传输问题,如何快速
将服务端的这些结果传给客户端,在带宽允许的情况下当然越快越好!这里会有很多处理措施,当然你可以打成一个包直接扔过去,但是这样是愚蠢的,像蜗牛背着一个
重壳在挪动,用户可等不了这么久;聪明的做法当然很多,根据你的实际需要,比如,你可以压缩,你可以分批,等等。
等等,其实服务器的整个开发,每个细节都决定了你的服务器的成败优劣。在开发linux服务器的项目后,我个人决定,一个让你的服务器变得强大的很重要的因素是——
——你不愿意放弃任何一个可以挺高性能的因素,即使是快0.01ms或者少传1bt的数据!

[流行的服务器模型]

1 PPC/TPC 模型

这两种模型思想类似,就是让每一个到来的连接一边自己做事去,别再来烦我 。只是 PPC 是为它开了一个进程,而 TPC 开了一个线程。可是别烦我是有代价的,
它要时间和空间啊,连接多了之后,那么多的进程 / 线程切换,这开销就上来了;因此这类模型能接受的最大连接数都不会高,一般在几百个左右。

2 select 模型

2.1. 最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的 由 FD_SETSIZE 设置,默认值是 1024/2048 ,因此 Select 模型的最大并发数就被相应限制了。
自己改改这个 FD_SETSIZE ?想法虽好,可是先看看下面吧 …

2.2. 效率问题, select 每次调用都会线性扫描全部的 FD 集合,这样效率就会呈现线性下降,把 FD_SETSIZE 改大的后果就是,大家都慢慢来,什么?都超时了??!!

2.3. 内核 / 用户空间 内存拷贝问题,如何让内核把 FD 消息通知给用户空间呢?在这个问题上 select 采取了内存拷贝方法。

3 poll 模型

基本上效率和 select 是相同的, select 缺点的 2 和 3 它都没有改掉。

4 Epoll 模型

把其他模型逐个批判了一下,再来看看 Epoll 的改进之处吧,其实把 select 的缺点反过来那就是 Epoll 的优点了。

3.1. Epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大 ,
具体数目可以 cat /proc/sys/fs/file-max 察看。

3.2. 效率提升, Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select 和 poll 。

3.3. 内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了。

等等。

在开发你的服务器之前,应根据自己的业务需求和实际情况,恰当地选择服务器的模型,这对这个服务器的功能效率都是具有很重要的意义的。

linux服务器开发浅谈的更多相关文章

  1. OPC服务器开发浅谈 — 服务器模型(转)

    这里主要讨论的是OPC Data Access 2.0服务器的开发,在掌握了这个最常用的OPC服务器开发之后,对其它类型的OPC服务器,如A&E.HDA等就可以触类旁通了. 一个OPC服务器的 ...

  2. Linux服务器开发初步

      服务器开发需要考虑的内容很多,比如服务器的架构.稳定性.性能以及负载能力等等. 事实上,在开发服务器的过程中,需要综合考虑各种因素,比如就客户端连接时间较短却又比较频繁的服务器(例如HTTP服务器 ...

  3. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  4. Python测试开发-浅谈如何自动化生成测试脚本

    Python测试开发-浅谈如何自动化生成测试脚本 原创: fin  测试开发社区  前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...

  5. linux安全加固浅谈

    难易程度:★★★阅读点:linux;python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必 ...

  6. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  7. springboot开发浅谈 2021/05/11

    学习了这么久,本人希望有时间能分享一下,这才写下这篇浅谈,谈谈软件,散散心情. 这是本人的博客园账号,欢迎关注,一起学习. 一开始学习springboot,看了好多网站,搜了好多课程.零零落落学了一些 ...

  8. linux服务器开发一 基础

    注:本文仅限交流使用,请务用于商业用途,否则后果自负! Linux 1.Linux介绍 Linux是类Unix计算机操作系统的统称. Linux操作系统的内核的名字也是“Linux”. Linux这个 ...

  9. linux服务器开发二(系统编程)--线程相关

    线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共 ...

随机推荐

  1. java中classPath和Xpath问题

    java中classPath和Xpath问题 今天遇到一个问题想获取classpath对应的目录,开始还以为java源代码可以像spring配置文件.xml中一样通过classpath:来获取对应的路 ...

  2. 2014第一周五开发问题记URL传参乱码等

    今天修改了页面中URL传中文参数乱码问题,本来远离通过在tomcat中配置URIEncoder是可以解决所有乱码问题的,但怕以后有人下载一个新的tomcat然后直接把程序放里面运行然后再发现乱码问题而 ...

  3. “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛暨河南高校邀请赛-正式赛(总结)

    这次轻院校赛,我们去了五个队,怀着打酱油的心态早早爬起来坐上校车出发了,由于昨晚室友打游戏,以及看视频大笑...没睡好,快1点才睡着,感觉特别困,车上没地方,睡不着,就在车上闭目养神,由于在新校区,不 ...

  4. easy ui 如何单个引用其中某个插件?

    记录一下这个方法,前端时间一直在纠结这个问题,后来听一些前辈讲解后才恍然大悟,要单独引用某个插件,我们需要重视的是:easyloaer.js ,easy ui的下载包中也有easyloader的dem ...

  5. c# 高斯模糊

    using System; using System.Collections.Generic; using System.Text; using System.Drawing; using Syste ...

  6. [KMP][HDU3336][Count the string]

    题意 计算所有S的前缀在S中出现了几次 思路 跟前缀有关的题目可以多多考虑KMP的NEXT数组 #include <cstdio> #include <cstring> #in ...

  7. zabbix监控代理zabbix-proxy

    新公司监控用的zabbix,其中用到了zabbix-proxy,原先没有尝试弄过,现在先提前安装看看,以便后续使用查阅. Zabbix-proxy 是一个监控代理服务器,它收集监控到的数据,先存放在缓 ...

  8. 修改MySQL默认最大连接数

    修改MySQL默认最大连接数 MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个: 方法一: 进入MYSQL ...

  9. 疯狂Android第一章:Android环境配置以及基本概念

    第一章 无关痒痛:Android Studio安装,配置,基本功能介绍! 重点内容:Android应用基本结构分析. 基础概念部分(只需知道作用,原理后见代码): Activity:安卓系统中负责与用 ...

  10. 设置Proxy Server和SQL Server实现互联网上的数据库安全

    ◆首先,我们需要了解一下SQL Server在WinSock上定义协议的步骤: 1. 在”启动”菜单上,指向”程序/Microsoft Proxy Server”,然后点击”Microsoft Man ...