第116章 要不这就算我的检查吧(数据再掉就恢复两更。)(1 / 2)五月冰城
实验室在顶楼走廊的最深处。
一进门就听到嗡嗡的服务器风扇声。
几台昂贵的nr工作站一字排开。
七八个博士生围在一个屏幕前,个个面如土色。
胡鹏趴在键盘前,手指飞快地敲击着,调取系统底层的rp文件。
“nn……”
胡鹏看着屏幕的报错,眉头锁成了一个“川”字。
“又是段错误。
线程之间的资源争抢太严重了。
咱们用的标准,底层的通讯机制在处理大量短连接的时候效率太低了。”
“要不加硬件?”
刚才那个报信的男生小声提议。
“再申请两台服务器做负载均衡?”
“加个屁!”
胡鹏骂道。
“这是软件架构的硬伤,你就是把机房堆满服务器,锁竞争的问题解决不了,一样得崩!
国家给的指标是单机5000并发,现在连一半都跑不到,下个月验收怎么交代?”
众人一片死寂,不敢接话。
陈浩站在人群最后面,目光扫过屏幕的架构图和那几行关键的代码。
他立刻看明白了。
这套系统采用的是典型的“rpr”每个请求一个线程模型。
这是当时架构的标准做法。
每一个客户端连接进来,服务器就分配一个独立的线程去处理。
在并发量小的时候,这种模型简单高效。
但一旦并发量来,成千万个线程同时在操作系统里抢占时间片,光是线程下文切换的开销就能把吃光。
再加他们为了保证数据一致性,在共享内存区加了大量的互斥锁。
这不崩才怪。
“胡院长。”
一个突兀的声音打破了沉默。
众人回头,看到那个本该在写检查的大二学生,正双手插兜站在后面。
胡鹏看到陈浩,火气又要来:
“谁让你进来的?出去!”
“如果是架构下的线程阻塞,加再多服务器也没用。”
陈浩没有动,而是指了指屏幕的一行代码。
“你们用的是同步阻塞/模型。
这种模型下,线程在等待网络数据的时候是挂起的,不仅占内存,还不干活。”
胡鹏愣了一下,开始重新打量起陈浩。
这番话切中要害,而且专业术语用得极准,绝不是一个大二学生能说出来的。
“你懂?”
胡鹏的声音沉了下来。
“略懂一点。”
陈浩走到屏幕前。
“我兼职的公司就是做高并发互联网应用的。
前段时间我跟着出差到硅谷,跟n公司负责规范制定的一帮工程师聊过。
现在的趋势是,瓶颈不在硬件,而在/模型。”
陈浩顿了顿,看着胡鹏:
“胡院长,能给我个白板吗?”
周围的博士生面面相觑。
一个大二的要在国家级实验室里给他们这些博士生讲课?
“给他。”
胡鹏盯着陈浩看了几秒,鬼使神差地挥了挥手。
一个博士生从角落里推过来一块白板。
陈浩拿起马克笔,没有废话,直接在白板画了一个图。
一个圆圈,周围连着无数线条,中间是一个单向的箭头。
“既然多线程容易崩,那我们就不要用多线程。”
陈浩一边画一边说。
“目前的架构是,来一个客人,我们就派一个服务员全程跟着。
客人点菜、吃饭、买单,服务员都得等着。
客人多了,服务员就不够用了。”
他在旁边画了另一个图。
“我们可以换个思路。
只留一个前台接待员。
所有客人的请求先到前台登记。
前台把请求分类,扔到后面的队列里。
厨房做好了,再通知前台叫号。
这就是多路复用。”
陈浩写下几个英文单词:/pn。
“利用系统底层的或者p机制,一个线程就可以监控成千万个连接的状态。
只有当真的有数据可读写时,才分配资源去处理。”
陈浩转过身,看着胡鹏:
“还需要把这块的同步锁去掉,换成无锁队列。”
实验室里没人回应,博士生们有的皱眉沉思,有的还在发懵。
在2000年,非阻塞/和r模式在学术界已经有了雏形,但在国内的工程实践中,还属于非常前沿甚至激进的技术。
大部分人还在死磕多线程优化。
胡鹏的眼睛却亮了。
他是行家。
陈浩画的这个图,虽然简单,但逻辑闭环非常完美。