個人檔案different life, differen...相片部落格清單更多 ![]() | 說明 |
|
11月19日 业内公司List,会不停的更新下去1.lighstorm
http://www.lightstormnetworks.com/ startup,卖点是PBB&PBT&OAM,适合光网的接入.据说中兴已采购
2.T-pack
http://www.tpack.com/ startup, 不做ASIC,做FPGA的平台,他们的情形据说还不错,在光网方面有很深的积累。
3.fulcrummicro
startup,网上说单芯片可以达到240Gbps, 感觉他们的ASIC应该用在Datacenter上。
4.LSI
老牌公司,在SDH,storage,Network Processor, ASIC方面都有很深的造诣。
11月17日 Network Programming in A Nutshell(转)网络编程得跟两个人学,一个是Richard Stevens。跟他学TCP/IP协议,学socket API的用法,学如何写正确的程序。另一个是Douglas Schmidt。跟他学构架,学设计,学如何正确地写程序。
Richard Stevens去世已有几年了,据说是因为滑雪事故。(好像技术造诣深厚的人去世方式都挺浪漫。还有一位大家熟知的技术大牛是因滑翔伞事故而离开我们的。)不过直到今天,每个接触网络编程的人依然都会从他的著作汲取营养。不少人看过Richard的全部著作:UNIX Network Programming(2卷本,讲如何用socket API编程,也讲了其他网络和跨进程通信AP),TCP/IP Illustrated(3卷本,以BSD为例讲了socket API的实现),Advanced Programming in the UNIX Environment(讲其他UNIX API的)。事实上,想对网络编程领域有较深入的了解,把他的著作全部看一遍实在是必做的功课。之后就是对需要用到的个别协议的了解了,或者是看相应的RFC文档去了解协议,或者看些相关的论文然后自己去定义或者改进协议。 虽然知道了这些就能写网络程序,但要写好的网络程序,还要再跟Douglas Schmidt学很多东西。Douglas Schmidt现在在U.C.Irvine做教授。著名的ACE(大概C++库中ACE是除了STL之外最出名的库了吧,Boost不算,因为Boost是一大堆库的集合而且恐怕暂时还不能算industrial strength的)就是他领导的小组开发的。跟他有关系的书包括Pattern-Oriented Software Architecture第2卷,C++ Network Programming第1卷和第2卷,ACE's Programmer Guide。POSA2整理了很多网络编程领域的设计模式,CNPv1和v2则介绍这些模式的实现(当然,是ACE的实现),ACE's Programmer Guide则介绍ACE的用法。更详细的用法可以参考ACE的doxygen文档。他的著作基本上都是他的论文的归纳整理。这里有很多他的论文的电子档:http://www.cs.wustl.edu/~schmidt/PDF/。 基本上,随便写一个网络程序,不管你用thread-per-session还是thread-per-request模型,还是用1个线程以事件驱动的方式处理所有I/O,不管你有没有用线程池,不管你应用层的协议是什么,不管你用同步阻塞式I/O还是异步非阻塞式I/O,你遇到的设计问题有99%的可能性也被ACE的设计者遇到了,并且他们用最佳的方式解决了。解决方式会被作为一个或多个模式记入POSA2那本书,具体的解决方案则以代码的形式出现在ACE中。如果你喜欢复用设计,去看POSA2吧。如果你觉得复用代码更好,用ACE吧。 如果你喜欢自己发明轮子,那我告诉你我遇到的两件事:一次是写一个通信部件,结果写完做unit test时发现有死锁,费半天劲搞定,然后看到Doug的一篇早期论文里的示例代码也有这个死锁问题,后来又看了ACE的代码,发现就把这个问题解决掉了,而且解决方法跟我的方法一模一样。还有就是用select来取socket handle的ready状态,然后分派到各个event handler。一开始觉得ACE的Reactor和Acceptor-Connector复杂,没必要照搬,就自己写了个简单的,结果后来发现出了各种各样的问题,从数据传递到线程冲突,好不容易把那些问题都解决掉了结果发现代码也变得复杂了而且不优雅而且还低效,若要再改好一点那就又变得跟ACE一样了。所以自己再去把那些地雷和陷阱踩一遍实在是浪费时间。 关于设计时的一些取舍,如果你在犹豫选择同步还是异步I/O,犹豫哪些部分异步处理哪些部分同步处理,那么也可以看POSA2和CNPv1、v2。书中对Reactor、Proactor、Half-Sync/Half-Async、Leader/Followers,Active Object、Monitor Object等作的详细的讨论包含了各种可行方案相比较的优缺点,这非常有助于你以较少的代价尽早做出正确的构架决策。 |
|
|