Archive for the ‘用过的技术’ Category

signal/slot机制

今天在看google的libjingle的source code;看到sigslot.h时,我比较孤陋,想当然地以为是一个signal(linux下的信号)处理函数,把成员函数connect理解为socket的connect;后来仔细看了下头文件中的说明:
// sigslot.h: Signal/Slot classes
//
// Written by Sarah Thompson (sarah@telergy.com) 2002.
//
// License: Public domain. You are free to use this code however you like, with the proviso that
// the author takes on no responsibility or liability for any use.
//
// QUICK DOCUMENTATION
//
// (see also the full documentation at http://sigslot.sourceforge.net/)

详细文档可以参考:
http://sigslot.sourceforge.net/sigslot.pdf

看了以后,发现这是一个很好的事件处理框架。

由于整个的代码还没看完,到时候再补充详细的理解。这里先开个头,又很久没更新了….




IO基础

这一篇主要整理存储和文件系统的知识。
我工作的前两年,写的程序从来不和数据库打交道,都是直接和文件打交道,而且用的都是c的API,所以到现在对write和read的熟悉程度还是要远大于fstream。由于业务的原因,程序写的数据量不大,主要是更新比较密集。在程序迁移到aix系统上以后,曾经碰到过io过慢的问题,当时的做法是把部分的数据做到了内存中(share memory)。
下面几个图比较清楚的说明了常见的文件系统和存储。

fs
目前的通用服务器,不管是否存储核心数据,scsi和raid1,都是标配了。上周很悲剧性地发生一台机器硬盘故障,发现这台老机器只做了raid0,导致数据全部丢失,所幸不是关键数据。

linux系统默认的文件系统是exe3,reiserfs我没用过,很多技术文章提到reiserfs在大批量小文件系统中的性能有大幅提高。这个特性对互联网公司有非常大的吸引力。打算最近一个月内做一个测试。

store

从图上可以看出,NAS的将来的结局和oracle应该非常接近,在互联网公司中逐渐被抛弃。
目前可以看到的趋势是:大规模廉价的通用硬盘替换昂贵的专用设备。在介绍硬盘物理io中的文章,我觉得这篇文章是比较好的。
对于一个10000转到硬盘,几个比较有趣的数据:
1, 10000 RPM / 60 seconds (10000/60 = 166 RPS)
2, 转换为 166分之1 的值(1/166 = 0.006 seconds/Rotation)
3, 单位转换为毫秒(6 MS/Rotation)
4, 旋转半圆的时间(6/2 = 3MS) 也就是 RD
5, 加上平均3 MS 的寻道时间 (3MS + 3MS = 6MS)
6, 加上2MS 的延迟(6MS + 2MS = 8MS)
7, 1000 MS / 8 MS (1000/8 = 125 IOPS)
每次应用程序产生一个I/O,在10K RPM磁盘上都要花费平均 8MS.在这个固定时间里,磁盘将尽可能且有效率在进行读写磁盘.IOPS 可以计算出大致的I/O 请求数,10K RPM 磁盘有能力提供120-150 次IOPS.评估IOPS 的效能,可用每秒读写I/O 字节数除以每秒读写IOPS 数得出.
7.2 Random vs Sequential I/O(译注:随机/顺序 I/O)
一个经验性的数据是,普通scsi的10000转速的硬盘的吞吐量大概是20MB/s.(单线程写2Gb数据,用了12秒).

对于很多小文件系统的应用来说,物理上将更多的小文件打包成一个大文件存储,类似于网络通讯中的多次一写,减少碎片是一个思路。




画图工具

写文档的时候经常需要画图,我用的比较多的是visio和rose。但是感觉不是特别好用。后来发现其实office 里的powerpoiont里面的画图挺好用的,画出的图形颜色是自填充的。

昨天下班回家时看到一哥们在画图,感觉画得不错。问了一下,是DIA
今天试用了一下,感觉和gdocs里内置的画图工具手感很像,基本的功能还可以,但是要画出漂亮的图来还是要费一翻周折。一个优点是开源的,free, open source.

欢迎推荐好用的画图工具。