zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

转 【整理】服务器编程模型

服务器编程 模型 整理
2023-09-14 08:59:46 时间
最近在研究服务器编程相关内容,故将看到的有用内容进行记录。 


==================================== 

从线程的角度,可以将服务器编程分为两类:单线程和多线程。 

【单线程模型】 

       一个进程中只有一个线程,由于只有一个线程,所以要实现高性能,必须与 “non-blocking I/O + I/O multiplexing” 相结合,另外 libevent 本身也是单线程的。相对于多线程,单线程 server 没有线程切换以及加锁的开销,劣势是不能充分利用 CPU 的多核优势,不过,这可以通过多个进程来解决。 

另外,这种模型编程也很简单,因为简单,所以是编写高性能 server 的首选。 


【多线程模型】 

       一个进程中有多个线程,一般来说,可以将这些线程分成两类:I/O线程和工作线程。由此又可以将多线程模型大体分成两类:单一 I/O 线程 + 多个工作线程、多个 I/O 线程(工作线程)。另外,不论是单线程,还是多线程,non-blocking I/O + I/O multiplexing 都是必选的。 

(1) 单一 I/O 线程 + 多个工作线程 

       这种模型下,I/O 线程负责 event loop 和 I/O 两部分,工作线程负责实际的业务逻辑处理,I/O 线程与工作线程可以通过队列/共享内存等方式进行数据交换,队列/共享内存的访问需要加锁。 
实际上,这种模型本质上与上述单线程模型是类似的,只不过这里的业务逻辑交由单独的工作线程进行处理。该模型的另外一个名字是:半同步/半异步模型(HS/HA)。 

 半同步-半异步(Half Sync-Half Async) 
       一个侦听线程负责接收请求,并在某个队列中缓存他们。另外一组工作者线程负责处理请求。因此接收请求的线程并不是处理请求的线程。 
  

(2) 多个 I/O 线程(工作线程) 

       这种模型下,每个 I/O 线程都有一个 event loop ,此时工作线程可有可无,而且通常是没有,即 I/O 线程既处理 I/O ,又进行业务逻辑处理。大家熟悉的 leader/follower(L/F) 以及 muti-reactor(M-R) 模型都属于这类。其中,memcached 使用的 M-R ,ICE 使用的 L/F 。 

领导者-跟随者(Leader-Follower) 
       有一个线程是领导者,其余线程是这个线程的跟随者。当请求到达时,领导者首先获取请求,并在跟随者中选取一个作为新的领导者,然后继续处理请求。因此接受请求的线程就是处理请求的线程。 


【小结】

个人认为: 
单线程模型实现简单,如果业务逻辑不复杂,是实现高性能 server 的首选,比如 proxy 之类的 server 。 HS/HA 很清晰,如果业务逻辑很复杂,比如 database ,可以考虑这种模型。 如果你想充分利用多 CPU ,当然可以考虑 L/F 或者 M-R 。但是值得一提的是,L/F 中会有锁的开销,而 M-R 中没有锁的开销,但 M-R 的线程切换的开销要高于 L/F 。根据同事的一些测试,对于短连接 L/F 的结果好于 M-R ,而对于长连接,M-R 要好于 L/F 。
原文地址:http://www.cnblogs.com/hustcat/archive/2012/01/11/2319249.html
收藏!编码器中如何融入结构信息?这几篇论文一定不要错过 编码器已经成为了很多 NLP 模型中的基本结构。不管你是做机器翻译,还是做句法分析,不管你是需要得到单词的上下文表示,还是需要得到句子的表示,你都需要一个强有力的编码器。输入一个句子,编码器最终输出每个单词的表示或者整个句子的表示。 而近些年来 NLP 领域用的比较多的编码器有 CNN ,RvNN ,RNN (尤其是 LSTM)和 Transformer 等等,今天我们主要关注最后两个。在编码器中加入结构信息有很多种用途。一是利用结构信息增强编码器的结构表示,进而提高下游任务的性能。二可以无监督学习出句子的句法树(如果融入的是句法结构信息的话)。
带你读《数据挖掘导论(原书第2版)》之三:分类:基本概念和技术 本书所涵盖的主题包括:数据预处理、预测建模、关联分析、聚类分析、异常检测和避免错误发现。通过介绍每个主题的基本概念和算法,为读者提供将数据挖掘应用于实际问题所需的必要背景。
带你读《软件项目管理案例教程(第4版)》之三:生存期模型 本书以案例形式讲述软件项目管理过程,借助路线图讲述项目管理的理论、方法及技巧,覆盖项目管理十大知识域的相关内容,重点介绍软件这个特殊领域的项目管理。本书综合了多个学科领域,包括范围计划、成本计划、进度计划、质量计划、配置管理计划、风险计划、团队计划、干系人计划、沟通计划、合同计划等的制定,以及项目实施过程中如何对项目计划进行跟踪控制。该书取材新颖,注重理论与实际的结合,通过案例分析帮助读者消化和理解所学内容,既适合作为高等院校计算机、软件及相关专业高年级本科生和研究生的教材,也适合作为广大软件技术人员和项目经理培训的教材,还可作为软件开发项目管理人员的参考书。