瓶颈,及傍晚的一缕阳光

瓶颈,及傍晚的一缕阳光




1. 流水线

上午,某同学的项目,今天是装系统,我们去了好几个人。外面风沙非常大,风
大到我要倾斜着才能行走,沙子大到迷了好几次眼睛。我把冲锋衣上面的那个帽
子 (应该是hood,但是我怕李记者说我小资,所以这样写) 也套上,免得压在里
面的棒球帽被风吹跑了。

到了里面,终于没有风,但是沙尘更大了。马上要运营了,仍在装修中。电锯
声,窄而陡的楼梯,昏暗的灯光,偶尔,有人的声音传来。像不像电锯杀人狂之
类恐怖片现场?

其实,打CS也挺好,很多射击死角。他们把半座大厦里面架上了铁楼板,分成很
多层,楼层间是错综复杂的铁楼梯,踩上去当当响。在铁楼梯上七拐入拐,终于
到了某个房间,木头门玻璃墙,怡与一般的常理相反。此处楼板表面铺以非实木
地板,踩上去也当当响,说明下面很薄而且是空的。

开始装系统。需要1.设置IP,2.分配IP和用途,3.安装系统并设置。很快发现需
要很长时间,有窝工的地方。

最开始是装系统非常慢。刘同学尝试了不用U盘,而是通过网络从服务器复制安装
文件,速度还是慢;分配两个人装系统和设置,很快另一个有别的安排跑了。

这时,流水线开始调整和形成。我们安排了一个人兼职向要安装的机器里复制安
装文件,并按刘同学的要求优化(并测试通过)了安装包的大小。

我们安装了两个人专门分配IP和写标签,把标签贴在机器脑门 (还是后脑勺)上。
很快,IP和标签最先完成。这一任务既完,重新安排这两位的工作:一个人去参
与分配IP,调另一个人专职负责向机器里复制安装包。

流水线于是大致形成,后来又有小的修改,于是形成下述格局。

一位供应商女士负责开机,然后把机器开着盖交给黄同学,黄同学和另一位同学
设置IP,设备完成以后,供应商男士把机器传递到另一间屋子给杨同学,杨同学
复制安装包,然后把机器盖上堆在刘同学面前,刘同学和 (有时)网络管理员女士
安装并设置,设置的时候连接到服务器上测试网络及数据库连接,然后盖上盖,
供应商男士 (与前面提及的是同一位)把机器重新装箱。

流水线一旦建立,不到一个小时,全部完成。

这个故事告诉我们,流水线中至关重要的,是找到瓶颈所在。方法是看谁的面前
堆的机器最多,减少他的任务,把他的任务拆开分配给别人,优化他的任务速
度,增加他可能的并行。

程序设计时,把查找瓶颈的工具称为 profile。应该优化的是,不是速度最慢的
部分,而是对系统整体速度影响最大的部分。

2. 傍晚一缕阳光

下午,讨论某项目,我迟到了半小时。非常抱歉。

讨论完以后,去找向龙同学,他昨天提到java访问mysql数据库乱码问题。某同
学在清华大学呢,说网络巨慢,希望我参与。这个问题很快就解决了,我昨天晚
上猜测了一下大约可能的问题,在网上搜索了两个贴子,发到了自己的信箱里。
现场选了较简单的那个,改 mysql.ini 的 defualt charset 为 utf-8,好使了。

除了在windows下,包括在java下,utf-8才是统一的标准。是不是有点像电子学
的图示,国标只有在上交报告时不得已才采用?

以上问题没多大意思,有意思的是下一个。向龙说,同步某几个数据库的时候速
度慢,每天的数据需要七八分钟。他非常非常非常熟练地告诉我:从这个mysql数
据库里的这个表里查找这个字段,然后把这个字段按某哔哔哔[此处保密]的算法
进行转换,在这个sql server数据库里查找这个表里的这个字段,然后再把它它
它写到……我实在记不住的另一个数据库里。

以上,是一个标准的流程,查查查,然后写。如果速度慢,问题可能在哪里呢?
每一步都有可能。

我们要做的第一步是--绝不是查找哪一步慢,而是验证向龙说的是真的。我请他
同步某天的数据,我们用手机上的秒表掐时间。

同时附加了一个小的验证实验。不带插入数据,2分40秒,带插入数据,2分20秒。
差不多。考虑到网页延迟,CPU分配不均啥的,应该就是一样了。那么,最后一
步插入并不是瓶颈。

此时,我想到图书馆当年导出数据时的著名案例,200多个工作日的工作量变成
半个小时导完。详情请参见以前博客,不赘述。

然后,我们开始新的验证实验。我请他,没错,我请向龙同学,而不是我自己,
因为我不会这些操作的步骤,我请向龙同学进行下述操作:把所有(两处)select
语句中的where子句中的所有字段设置为index。

第一处,mysql那个,向龙自己已经加了index。我看了半天新新新版的
phpmyadmin,在向龙的指导下找到了索引,我上次用它是十年前?

第二处,sql server那个,加索引的时候提醒我们,改库结构可能会花很长时间。
然后,瞬间就加完了。不知道是机器太快了还是怎么的,按说库应该不小啊。当
年图书馆那四十多万种图书的记录加索引花了2个小时还是多长时间来着。

加完索引以后,我们重复导出的实验。20秒。换一天,还是20秒。再换一天,很
长很长时间没反应,但是向龙查库结构已经导完了。再换一天,还是20秒。后来
我们估且认为,那次时间特别长的,是程序出了毛病。

我坐在向龙的旁边,等二猫放学。午后,接近傍晚的阳光斜着从南面的窗子里射
在他的桌子上,很温暖。桌子是暗黄色的木纹,上面放着一个透明的水瓶,里面
几枝植物绿色黄色的根茎。阳光穿透这些根茎投射在桌面的木纹上,光影交错。

有一缕阳光,正好射在我的眼睛里,那是瓶底附近的一小块光斑。周围的一切都
隐在暗淡里,向龙哗哗敲着键盘导这个那个数据,他对面的女士一边查着新的机
动车限行规定一边出声地思考。所有这些都模糊了,只有那一缕阳光分外清晰。

我拿相机拍下来,说这个太漂亮了,就从我刚刚坐着的那个角度看。向龙说,啊
呀,是挺漂亮,我一直坐在这里都没注意到,就在我显示器后面。

我说:就是因为你一直坐在那吧。

向龙说:你还有精神头整这个呐。

我说:兄弟,如果没有这个,我不知道还能不能活下去了。

如果身处流水线中,一个又一个的瓶颈,看不到未来。你会不会绝望?那一缕阳
光,就是唯一的安慰了,存在,真实,温暖。

最近在看《哥德尔 艾舍尔 巴赫》。作者说,人都生存于一个系统之中,很多人
花费大量的时间就是为了认识到或说服别人,这样一个系统的存在,然后从系统
中摆脱出来。超越自己存在于其中的,又谈何容易?虽然,跳开去看,像赵元良
老师教导我的,那些小事,又都算得了什么。诚然如此,可是问题又回来了,如
何跳开去呢,向哪个方向?

前路漫漫,估且欣赏这一缕阳光吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发阳光旅行网app中用户下单功能,可实现用户添加订单并完善出行人信息、修改订单,删除订单以及打印行程信息等功能。 具体功能要求如下: (1)显示系统主菜单 包括添加出行订单、查看我的出行订单、修改订单信息、删除出行人、查看行程、退出系统6项功能,其他功能本项目不做要求,当用户选择功能编号后可进入执行相应功能。执行结果如图1所示。 图1 主菜单 (2)添加出行订单 填写出行日期、联系人手机号码、循环录入出行人信息。 出行人信息包括: 出行人类别:成人、儿童(1.2m以下)、老人(65岁以上) 姓名 年龄(如选择类别为老人,输入年龄不足65岁的,显示提示信息“对不起,老人订单年龄需为65岁以上!”) 如果是儿童,需确定是否占床 每成功录入一条出行人信息后,显示出其详细信息,并计算出行金额。定价如下: 成人:2000元/人 儿童:免费,如需占床另加30元 老人:半价,即1000元/人 当一条出行人信息录入完毕后,提示“是否继续添加(Y/N)?”,此处不区分大小写,当输入y或Y时继续录入下一条,否则显示订单信息,包括: 出行日期 联系人手机号码 订单总金额(即所有出行人定单金额之和) 最后显示主菜单。执行效果如图2所示。 图2 添加出行订单 (3)查看我的出行订单信息 查看我的出行订单:查看所录入的订单信息。包括出行日期、联系人手机号码、所有出行人信息,运行效果如图3所示。 图3 查看我的出行订单 (4)修改行程信息 可修改出行日期、联系人手机号码,要求手机号码必须为11位,否则抛出异常信息,提示“手机号码必须为11位”,运行效果如果4所示。 图4 手机号码不是11位 正确修改后,显示修改后的信息,并提示“修改成功!”。如图5所示。 图5 修改订单成功 (5)删除出行人 填写要删除的出行人姓名,执行删除操作,删除成功后给出提示“删除成功!”,如图6所示。如果输入姓名错误,则提示“对不起,定单中不包含此游客信息!”如图7所示。 图6 删除出行人成功 图7 删除出行人失败 (6)查看行程 显示本次旅行行程信息。运行效果如图8所示。 图8 查看行程 (7)退出系统 退出当前系统,显示“欢迎下次再来。”如图9所示。 三、要求与实现步骤 (一)不使用数据库,使用对象和集合存储数据 (二)定义实体类(成人订单、儿童订单、老人订单),儿童订单、老人订单为成人订单的子类。实体类至少包含但不局限于以上3个。 (三)在各实体类中均需实现各自计算订单价格、显示订单信息的方法,使用方法的重写。 (四)定义工具类,实现查看我的出行订单、添加订单、修改行程信息、删除出行人、查看行程等方法。需使用到对象传参。 (五)使用泛型集合存储所有出行人信息,使用集合的遍历实现查看订单信息、统计订单总金额、删除出行人等功能。 (六)显示信息时,只有儿童出行人需显示是否占座,需使用面向对象多态实现。 (七)修改行程信息时,当手机号码录入错误时需使用throw手动抛出异常。 (八)定义测试类,完成项目功能菜单以及整体流程,调用相应方法实现具体功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值