讲个程序员的故事给你听

就想叫yoko 2014-04-03 08:55:41
从前,有一群码农小伙伴,他们中有快乐的码农,当然也有不快乐的,但对于他们都是码农这一点,是毫无疑问的。
踏着互联网浪潮,他们玩起了网络程序,首先他们需要写一个网络库(为什么他们不用开源网络库呢?额,这是个好问题,因为这样那样的原因,我们先暂时对这个问题视而不见吧)。码农一号当仁不让的承担起了这个艰巨的任务。
这是一个linux下的server程序,一号baidu查了些资料,知道要用epoll来写。让我们提前做一个预设,在客观条件恒定的情况下,单线程epoll性能极限能跑到100QPS,大部分玩转网络编程的程序员能写到80+。一号费了九牛二虎之力,但鉴于能力有限只写到了10。我草,这没法交活啊。业务需求在20+啊。于是一号开始了性能调优。他把水平触发改成了边缘触发,他改出了一个磕磕绊绊山寨版的one loop per thread的多线程版,他甚至在每个线程中都毫无目的的人为sleep了一下(请原谅我举了一个这么弱智的例子,大家可以自行脑补一个更合适的)。经过漫长的开发,4个epoll线程QPS跑到了30!!!
老大很高兴,二号酸溜溜,三号事不关己,四号对一号的敬仰如滔滔江水。。。总之,他们都或真心或假意的对一号恭维了一番。
一号开始得瑟了,逮谁跟谁聊网络编程。“epoll要想高并发就得边缘触发”、“不多线程吞吐量就上不来”、“关键就在于那个sleep,不然低时延没戏”。
老大是个线程控,对多线程这点很认同,”边缘触发?听起来好像是高级一点“,但他大概也知道sleep那地方有点不对头,他曾咨询式的向一号提议是否去了会更好。“那怎么行,这可是成功的关键啊“,一号怒答到。对于一号来说,sleep是他苦思冥想、釜底抽薪的神来之笔,他不允许别人对它有任何的质疑。老大曾试图屏蔽掉sleep,但由于代码实在太耦合了,注释掉sleep程序就编译不过去了。。。”算逑吧,能跑到30就行了,上线吧,管那么多呢“,老大释然的想到。
团队在慢慢扩大,新来了一位从一线公司出来的三线程序员。带着一线公司出身的优越感,他对小伙伴们的鄙视总是由内自外、有意无意的流露出来,甚至是对老大!!!偶然他得知了网络库这项目,没见过猪跑,但吃过猪肉啊。他知道单线程epoll能跑到80+,急于证明自己的他申请重写网络库。但鉴于他三线程序员的角色设定——眼高手低,东西始终出不来,又由于到处结怨,最后被小伙伴们幸灾乐祸的排挤走了。。。
团队继续扩大,来了位真正的高手,他技术高超,为人谦逊,脚踏实地,干了不少硬活。随着业务持续增长,老网络库HOLD不住了。他轻描淡写的用多线程管理多个libevent-base将QPS提升到了400QPS。从此小伙伴们都对他倚重有佳,即使是”专家一号“——真心假意就只有他自己知道了。。
...全文
152 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
就想叫yoko 2014-04-03
  • 打赏
  • 举报
回复
我就是故事中的码农四号啊
就想叫yoko 2014-04-03
  • 打赏
  • 举报
回复
引用 1 楼 mougaidong 的回复:
100QPS,不算什么高要求吧。 要知道都是单线程的nginx和redis都号称10万QPS的,不过我用过我知道,最起码1万QPS是毫无压力的。
呵呵,兄弟认真了,只是讲个故事,100可以理解为100%。 我本来想写50W的,但鉴于个人网络编程水平有限,怕写错了行家笑话。
turing-complete 2014-04-03
  • 打赏
  • 举报
回复
100QPS,不算什么高要求吧。 要知道都是单线程的nginx和redis都号称10万QPS的,不过我用过我知道,最起码1万QPS是毫无压力的。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧