多线程编程
文章平均质量分 76
feimataxue
这个作者很懒,什么都没留下…
展开
-
web server架构之一Simple Multiple Threaded Achitecture
Web Server的架构基本分为多线程和事件驱动两个基本观点,在实现上对多线程和事件驱动取长补短形成了流水线的架构。 在Web Server高并发,高吞吐率,低资源消耗,低延迟的要求下,Web Server的发展也历经了事件驱动占主流,到多线程反击[1][2],以及比较成熟的流水线架构。 在多线程的优点主要是容易理解,对资源的使用很容易饱和,缺点是上下文切换太多(线程代码转载 2012-06-03 20:04:53 · 392 阅读 · 0 评论 -
Web Server 架构浅谈-Threadpool-based Multiple Threaded Achitecture
上节我们讲到了简单的多线程架构,这个架构可以做一些改进和优化: 首先,是优化线程创建的开销。操作系统默认的进程初始栈空间,32位操作系统为1M,64位操作系统为2M(不同操作系统版本可能会有差异)。那么并发10K的线程可能需要10G内存,这是不可想象的,因此可以自行设定栈的大小和溢出区,代码如下: size_t size = max(10*PAGE_SIZE,PTHREAD_STACK_MIN转载 2012-06-03 20:49:47 · 310 阅读 · 0 评论 -
Web Server 架构浅谈-Simple Event-Driven Achitecture
本节首先给出关于架构评价的一些指标: [H. Xie 2002]关于架构提出了micro performance和macro performance,以此为参考,在本系列中,对架构好坏的评价分析时也是从这两个层面来讨论,但内涵稍有不同: 用户角度:公平性,响应时间,吞吐率。其中响应时间有包括等待时间和处理时间。对人来说公平性是第一位的,如果一个架构是歧视性的,往往没有生命力转载 2012-06-03 20:52:18 · 489 阅读 · 0 评论 -
浅析对象池
在稍微大型一点的软件系统开发中,通常我们会用到内存池,对象池,线程池,连接池等各种各样的池(Pool),本文就来讲一讲对象池(Object Pool)。下面从四个方面来介绍一下对象池: 1.什么是对象池(Object Pool) ? 池(Poo), 与集合在某种意义上有些相似。 水池,是一定数量的水的集合;内存池,是一定数量的已经分配好的内存的集合;线程池,是一定数量的已经创建好的线程的集合。转载 2012-06-07 15:14:34 · 529 阅读 · 0 评论 -
定时器(Timer)的实现
本文是继前面写过的《谈事件驱动模型中的“超时”(Timeout)处理》的第二篇,主要谈一谈事件驱动模型超时处理中用到的定时器的实现,以及如何用定时器来处理事件驱动模型中的超时事件。 下面就从以下几个方面谈一下定时器: 1. 什么是定时器? 定时器,又称Timer,顾名思义,它是用来在指定的时刻完成特定任务的一种工具的抽象。 2. 定时器是干什么用的? 在程序中,定时器常被用来完成两类任务转载 2012-06-07 15:59:08 · 1266 阅读 · 0 评论 -
谈事件驱动模型中的“超时”(Timeout)处理
写在最前面:本文是作者在开发爬虫程序时的一些体会,分享一下,希望能给读者朋友一点点帮助。 通常,在事件驱动模型的程序中,会有一个事件处理模块,我们称之为EventProcessor,还会有一个事件检测模块,我们称之为EventMonitor。下面是一般的处理流程: (1)EventProcessor在发出对某一个事件的请求后,不会去等待事件结果的返回,而是返回去做其它的工作; (2)当Eve转载 2012-06-07 15:49:02 · 1024 阅读 · 0 评论 -
条件变量(Condition Variable)详解
条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子,应用程序A中包含两个线程t1和t2。t1需要在bool变量test_cond为true时才能继续执行,而test_cond的值是由t2来改变的,这种情况下,如何来写程序呢?可供选择的方案有两种: 第一种是t1定时的去轮询变量test_cond,如果test_cond为false,转载 2012-06-07 21:07:02 · 420 阅读 · 0 评论