书城都市那些年一起疯狂过的程序员
34631100000003

第3章 欲笺心事,独语斜阑

学校里在搞什么商业活动,peoplemountainpeoplesea的,真麻烦,想找个地方静静都难。那个小姑娘安静地站在那里,直觉告诉我她挺好看的,别问我哪来的直觉,天天和金枪这个家伙在一起谁都会对美女变得过敏的。

金枪说我行过很多地方的桥,看过很多地方的云,玩过很多地方的姑娘。

我说黑夜给了我黑色的眼睛,我却要用它来寻找美女。

扯远了。

经过女孩的时候我肆无忌惮地朝她望去,嘿嘿,小姑娘望着我甜甜地笑。她的微笑,暖暖地照耀进我心里,阳光从她的背后晕开模糊的光圈,我逆着光线看着她,眼睛一阵刺痛,二十岁的季节里没有忧郁,只有单纯的快乐。——2006年夏.elber

我陷入一种无法自拔的情绪当中,只能在QQ空间里写写日记来聊以**。

关键是情场失意,职场也不得意。

没入行之前,就听说IT业把女人当男人用,把男人当禽兽用。

上班的第一天,对于这一点,就有了深刻领略。

下班基本都没有人走,我对开发环境都不是很熟,要在两个星期之内,完成两套软件在两个不同操作系统的移植,再加上functiontest和stresstest,根本就来不及。

套用陈总舵主的话,加班是九死一生,不加班十死无生。

老三小辉洗脑归来和我们汇合了,华为公司培训关键就强调几点:

第一,狼性精神,遇到困难要迎难而上,没有困难制造困难也要上

第二,“不让雷锋吃亏”,不会让你白做雷锋,付出总会有回报,重赏之下必有勇夫嘛

第三,“板凳要坐十年冷”,要耐得住寂寞,做一颗哪里需要就去哪里的螺丝钉

第四,团队精神,大家都是一个战壕里的兄弟,要互相扶持,同呼吸共命运。

大公司就是大公司的气象,培训完了之后还有七天的编程基础,小辉说其实之前在学校里学的东西基本没用,大公司基本都有他的作业流程和代码规范。

我叹道:“我就不行了,还没摸过枪就直接上前线。”

老三像打了鸡血一般,一想到明天就要分部门,就热血沸腾的样子。华为的产品线纷繁复杂,很快,老三就会成为其中一条产品线上的一颗螺丝钉。

金枪最近一反常态,不再在阳台上摆pose。

”老大,失恋啦?”

金枪一脸堤防地说:”看你那八卦的样子,怎么,不想你的啦啦队了?“

”那些都是浮云而已。。。要不,你有什么不开心的事情,说出来让哥们开心一下?“

”别提了,上次在过桥米线吃饭,错过了一个OL美女,那气质,那形象,没的说啊。“

”OL应该去星巴克才对,哪会让你在过桥米线撞上?”

”人家就是冲我来的呀,当时我坐在靠窗的位置吃面,人家进来就坐我对面,拿出餐巾纸把我面前的桌子擦来擦去,看我一直低着头,还问我好不好吃来着。“

”那你怎么回的,要我的话就说,要不美女你尝尝?“

”我当时一紧张,忘了怎么回的人家了,总之后来匆匆扒了两口就走了,连声再见都没说呀。“金枪露出一种痛心疾首的样子。”

”发挥严重失常啊,这样吧,兄弟我就牺牲一下,最近咱们就天天去那家过桥米线蹲点,说不定还能再见到那位美女呢。“

同是天涯沦落人,我以日后提到过桥米线就想呕吐的代价,帮助金枪找到了他的女神,这下只剩我一个人沦落了。

好在我无暇为此太过分神,因为两周的交货期已经过去一周,我刚刚把CELinux的移植部分做完,虽说不用改什么代码,但是把整个交叉编译工具链移植过来,写Makefile也颇费工夫。

好在Makefile不用自己原创,基本也是那原来的Makefile稍微改改就可以,发现问题再去查。

虽说难度不大,但是运行完StressTest,看到屏幕上打出test的log还是小有成就感。

接下来,移植Tkernel才是大头。

这几天基本天天加班到很晚,嘉庆交给我的第一个任务,必须保证质量,嘉庆虽然不说,我感觉到,这是对我的一个试探,毕竟还在试用期,如果完不成任务,不是开玩笑的。

水哥走的时候,不怀好意地关照一下:”elber,注意身体哦。“

我回敬道:“水哥你也是哦,不要和嫂子日夜操劳。“

水哥对飞雪挑了挑眉毛:”别这么说嘛,飞雪要吃醋的。“

被飞雪狠狠地瞪了回去。

上班的时候没法发问,我赶紧一把抓住水哥问道:”先别走,到底线程和进程有什么区别?“

水哥说到专业还是头头是道的:“关于进程和线程,教科书上最经典的一句话是‘进程是资源分配的最小单位,线程是CPU调度的最小单位’,进程使用独立的用户空间,而线程没有,所以进程对系统的开销相对比较大,线程比较灵活,因为线程间可以共享一部分空间,所以互相通信比较方便。”

“比如说一个进程中的多个线程,可以使用公共变量互相通信是吧?”

“都会抢答了,不错。”水哥理了理思绪,继续说道,“但是数据同步需要锁,这一点要注意,C程序库中的errno是个最典型的一个例子。errno是一个全局变量,会保存最后一个系统调用的错误代码。在单线程环境并不会出现什么问题。但是在多线程环境,由于所有线程都会有可能修改errno,这就很难确定errno代表的到底是哪个系统调用的错误代码了。这就是有名的‘非线程安全(NonThread-Safe)’的问题。”

“那像我要移植的tkernel的task这个概念,到底和linux中的线程的概念接近,还是和进程接近呢?”

“应该介于两者之间吧。这么说吧,进程负责收集资源,包括cpu和内存等,线程是cpu的执行流。”

“呃,执行流?”

“打个比方说啊”,水哥眼珠滴溜溜乱转,明显又在打什么歪主意,“我们两个带姑娘去开房,如果现金充裕呢,就开两个房,这个就相当于我们开了两个进程,缺点是我们进程间通信不太方便,一个人完事了要打电话给另一个人吧。”

“哦哦哦,线程呢,难道是~”

“线程就是你没钱,一个人带两个姑娘,只开了一个房,然后轮流XXX,这就是两个线程罗。”

“哦,这下明白了。”我恍然大悟。

“你看你这个task啊,运行、等待、静止、就绪、虚拟五个状态,和linux线程大致相同,只是调度机制少了点而已,只有先进先出调度,不像linux的策略那么复杂,分时调度、实时调度和先进先出调度做了一个结合。所以直接把linux的线程换成task的api,问题不大。”

果然是技术大牛,这些观点和嘉庆一开始和我说的基本差不多。

“恩,不过我觉得tkernel这个抢占式内核倒是和你挺类似的,毫无节操,看到漂亮姑娘就不断调整自己的任务优先级。”

“去你的!”