zoukankan      html  css  js  c++  java
  • 服务器模式

      服务器开发貌似有固定的模式,性能和复杂度各异,现总结下常见的模式。当然服务器的开发并没有固定的模式,除了以下总结的外,实际根据业务的不同,生产中还用过其他模式。

      1. 阻塞式服务器
        主要特点:一个连接上来,等服务完毕后,才释放连接,在服务过程中,不能接收其他连接。一般而言此类服务的socket一般是阻塞的。此类服务器一般性能比较低的,基本上生产上不会用这种模式,只有在学习或做一些简单的测试才会使用这些模式。

      2. 迭代式服务器
        主要特点:一个连接上来,fork一个进程或创建一个线程进行服务,在一个服务的过程中,可以同时服务多个连接。一般来说,此类服务socket一般也是阻塞的。此类服务一般性能会比阻塞式服务器高很多,也有很多公司用这种模式,比如kugou的服务端。如果连接数比较大,C10K问题就非常明显,随着连接数的增加,性能剧烈下降。而且如果基本上是短连接的话,主动关闭会出现大量的TIMEWAIT或CLOSINGWAIT状态。

      3. 资源池的服务器 主要特点:预先启动一定数量的线程或进程,启动的数量根据实际的情况启动。每个连接来时,分配到空闲的线程或进程,也可以根据实际情况一个线程或进程处理多个连接业务,当无法找到空闲进程或线程时,可以动态增加线程或进程,socket可以是阻塞或非阻塞的。这类服务器需要预先估计服务器的承载能力。也有比较多的公司使用这种模式。当然会根据实际情况进行一些变化,比如说在服务器接一个前端,将前端的报文分发到消息队列,多个进程或线程竞争抢着处理。但本质上就是资源池的概念。nginx 貌似也是这种模式的,nginx还有一个先进的地方是多个进程同时linsten一个fd,linux是允许多个进程同时监听一个端口的,当一个进程accept成功时,其他进程accept也会返回,这是群惊效应。自己很多年前也曾实现类似的服务器框架。jmm

      4. 非阻塞无状态服务器
        主要特点:一般都是单进程,采用epoll多路服务,对于动态数据,一般存在redis或一些分布是缓存中。一个进程可以接受多个连接,同时服务。当遇到性能瓶颈时,可以随便增加进程。一般这类服务器前端还可能接负责均衡器。现在一般都用这模式进行开发,性能比较可观,而且扩展非常方便。

          1. http://luoguochun.cn/2014/06/25/server-mode/
  • 相关阅读:
    [字符串] 洛谷 P2264 情书
    [IDA*] 洛谷 P2324 骑士精神
    [Tarjan] 洛谷 P2746 校园网
    [dp][瞎搞] 洛谷 P2501 数字序列
    [虚树][lca][dfs] 洛谷 P3233 世界树
    [斜率优化][dp] 洛谷 P3648 序列分割
    [带修莫队] Bzoj 2120 数颜色
    [数学][组合数] Jzoj P4257 着色
    [贪心][前缀和] Jzoj P4256 平均数
    [dfs] 洛谷 P2535 收集资源
  • 原文地址:https://www.cnblogs.com/imlgc/p/3809016.html
Copyright © 2011-2022 走看看