第(1/3)页 实验室在顶楼走廊的最深处。 一进门就听到嗡嗡的服务器风扇声。 几台昂贵的SUn Ultra工作站一字排开。 七八个博士生围在一个屏幕前,个个面如土色。 胡鹏趴在键盘前,手指飞快地敲击着,调取系统底层的COre DUmp文件。 “SegmentatiOn faUlt……” 胡鹏看着屏幕上的报错,眉头锁成了一个“川”字。 “又是段错误。 线程之间的资源争抢太严重了。 咱们用的CORBA标准,底层的ORB通讯机制在处理大量短连接的时候效率太低了。” “要不加硬件?” 刚才那个报信的男生小声提议。 “再申请两台服务器做负载均衡?” “加个屁!” 胡鹏骂道。 “这是软件架构的硬伤,你就是把机房堆满服务器,锁竞争的问题解决不了,一样得崩! 国家给的指标是单机5000并发,现在连一半都跑不到,下个月验收怎么交代?” 众人一片死寂,不敢接话。 陈浩站在人群最后面,目光扫过屏幕上的架构图和那几行关键的C++代码。 他立刻看明白了。 这套系统采用的是典型的“Thread-per-ReqUeSt”(每个请求一个线程)模型。 这是当时CORBA架构的标准做法。 每一个客户端连接进来,服务器就分配一个独立的线程去处理。 在并发量小的时候,这种模型简单高效。 但一旦并发量上来,成千上万个线程同时在操作系统里抢占CPU时间片,光是线程上下文切换的开销就能把CPU吃光。 再加上他们为了保证数据一致性,在共享内存区加了大量的互斥锁。 这不崩才怪。 “胡院长。” 一个突兀的声音打破了沉默。 众人回头,看到那个本该在写检查的大二学生,正双手插兜站在后面。 胡鹏看到陈浩,火气又要上来: “谁让你进来的?出去!” “如果是CORBA架构下的线程阻塞,加再多服务器也没用。” 陈浩没有动,而是指了指屏幕上的一行代码。 “你们用的是同步阻塞I/O模型(BIO)。 这种模型下,线程在等待网络数据的时候是挂起的,不仅占内存,还不干活。” 胡鹏愣了一下,开始重新打量起陈浩。 这番话切中要害,而且专业术语用得极准,绝不是一个大二学生能说出来的。 “你懂CORBA?” 胡鹏的声音沉了下来。 “略懂一点。” 陈浩走到屏幕前。 “我兼职的公司就是做高并发互联网应用的。 前段时间我跟着出差到硅谷,跟SUn公司负责Java EE规范制定的一帮工程师聊过。 现在的趋势是,瓶颈不在硬件,而在I/O模型。” 陈浩顿了顿,看着胡鹏: “胡院长,能给我个白板吗?” 周围的博士生面面相觑。 一个大二的要在国家级实验室里给他们这些博士生讲课? “给他。” 胡鹏盯着陈浩看了几秒,鬼使神差地挥了挥手。 一个博士生从角落里推过来一块白板。 第(1/3)页