C++大会感悟
写在前面:
我是一名学生,在北邮读研,也是跨专业学的计算机,个人对服务器端编程感兴趣,平时主用c/c++,所以逮到这次机会就参加了这次大会。
正文:
这次参加c++大会也算是我最认真的一次,两天几乎每轮讲座都在认真听。参加这次大会的初衷是去找大牛合影,看看工业界c++一些发展和应用,基本上目的也达到了。不过以为能见到侯捷老师,带了一本他的书,还是蛮重的,弄到最后听人说提前走了,有点遗憾。不过和云风,李老师(李建忠),何登成老师,高博老师合影已经满足了我的愿望,原来我是一个追星族(逃。大会共两天,我满满地参加了两天,不过有多个会场,我就选了一些我比较关注的会场。第一天早半天是比雅尼的专场,据说这段时间老爷子走过好多中国地方做演讲,讲了c++之所以是c++的三个主要特色,包括对硬件的直接访问,对抽象的零开销,稳定性和可移植性。还讲了c++11/14一些新的特性,说了c++做了哪些事。让我眼界大开。祖师爷说他喜欢一种语言,是看这种语言能做什么。还有老爷子竟然说他最喜欢的一个c++特性竟然是递归的构造函数,果然是高手。老爷子也说了c++需要有包容的态度,也考虑将其他语言的优点融入其中,讲了一个例子就是module编程,即只需要包括用到的东西,用不到的就不加到程序中,类似于python和Java中的import功能。说之后可能会加入c++,这绝对是一个很大的提高。下午参加了Andrei的演讲,主要讲了一些可移植的优化技巧和一些编程指导,老师居然最后说中文,蛮有趣的,2333。Andrei还给了一些非常中肯的指导,一些直觉往往违背事实,告诉我们要通过实际测试去检验,比如说下面两个直觉都不正确1)fewer instructions=faster code2)data is faster than computation 当然反过来的假想图设也不一样,然后给了一个普世的标准,上机去测试实际的时间。当然老师他也举了例子来检验他提出的一些直觉判断违背实验结果的例子,非常棒。当时云风大哥也在听这个会议,坐我后面,我就问了云风一个问题,为啥a[i++]比a[++i]更好,当然这个问题等下Andrei也会讲到,当时云风大哥点了一句话我就知道原因了,之前也知道点,可能有点忘了,因为我知道在STL里迭代器的后加加是要调用前加加的,以为STL是模仿整数基本类型,那样的话肯定是前加加好,云风大哥说那不是一回事,整型这边的i++会更快,主要是更有利于流水线工作,可以同时执行两个操作(取值和加一),且是缓存友好型的,而++i必须要等加完一才能取值,说话期间声音非常温柔,最后云风大哥还添了一句,这是我的想法哈,不知道对不对。一点没架子,非常棒。后期他的讲座我也去参加了,本来想听严世光老师的讲座的,直接抵制不住云风大哥的诱惑,直接奔过去了,也和云风大哥合了影,签名。果然我是云风大哥的脑残粉。后期好几个讲座很巧合和云风大哥坐的很近,感觉特别有正能量。第二个我想说的是高博老师,开会前就聊过几句,毕竟我比较崇拜技术大牛,因为高博老师这次主要工作是作同传,比较忙,一直找不到机会聊,然后第二天会议中午结束后,我准备出去吃饭,碰到高博老师,第一句话就是咱合个影吧,老师愉快的答应,然后交流了一些我个人的问题,老师说你的问题不大,多读几本书就好了,我改天给你寄几本书送你看,我当时就拒绝了,我妈经常跟我说不要贪别人的东西,感觉高老师非常好,还给我建议用什么编译器,编辑器等,说完就说一起吃饭吧,哈哈,我说我买的特惠票,要出去买了吃,然后就先分开了。后来因为聊的比较长,加上上午的演讲拖时间了,我其实中午没吃饭,饿死我了,演讲延时这是大牛演讲的通病,不过陈硕老师做的不错啊,比如说陈硕老师有10分钟的演讲,那即使他有30张ppt,那他会直接选几张有数据的ppt讲,控制好时间。第二天参加了Mike Spertus的内存管理讲座,口音不重,语速考虑到了我们,非常赞,基本能听懂一些,讲内存管理也基本遵循一般的讲法,将new/delete拉出来,然后进行大批判,最后拿出新的解决方案就是两个智能指针,用于管理内存资源避免泄漏,当然这些知识在boost中早就有了,好像std::tr1也早就有了,c++11也加入了这些特性,这些特性的确比之前单纯写new/delete好,指不定写new/delete时会发生异常导致delete无法执行到,那内存就泄漏了。后面还讲了多线程在c++11中引进并讨论了多线程和内存之间会发生的一些问题,无非就是内存数据共享,有人说加锁呗,很遗憾,一个加锁操作很可能就抵消了多核机器的优势,不过实在需要用锁那也只能用了,但要遵循尽量减少锁的范围减少数据依赖,后面讲了内存模型方面的最佳实践即cache line和false sharing,这里我已经不是很懂了,反正就是在cache line这边好像用到对齐,这样可以加速,还讲了原子计数,这边已经有点懵了,后面听了何登成老师的高性能c/c++高性能优化:从理论到实践,这边感觉有一个重合之处,准确一点是将理论运用到实践中,前面Mike说过一个技巧就是关于并行时锁的问题,一个锁可能就抵消了多线程的优势,所以开发过程中要少用锁,必须用的时候需要减少范围,这里边提出了一些新的替代方案,其中包括当锁住的资源之间不需要同步的话,可以每次用一个队列将锁住的资源全部替换出来,其实陈硕老师的木铎库里边的就有实践这个功能。还有就是现在有用copy-on-write技术来替代读写锁,这里边何老师讲了G5 Discovery,这其实Mike的lecture中也讲到了,不过何老师将这个技术运用到了他们公司数据库AliSQL中并提高很大的性能,还讲了一些关于AliSQL的优化,讲的不错。后面也听了吴咏炜老师的函数式编程,人很多,我就占了几十分钟,不过值得了,回头还要消化消化。后面我听了祈宇老师的RPC讲座,听起来很不错,不过由于时间问题就讲了一些他们的RPC的优势和一些细节,在后面有专门的论坛讲座,当时我就提出了一个问题,当RPC调用超时,调用无法区分1)是网络故障还是对方机器崩溃2)软件还是硬件错误3)其他 根据祈宇老师回答,他的RPC会有对应的错误码,所以我大概猜测啊,RPC调用发生超时倒不必非要区分究竟是什么错误,很精确,而是大体是什么错误,最后我参加的一个论坛是编程修炼,然后我提出一个问题:该不该花时间去看源代码,在场的四位嘉宾包括王博老师,刘光聪老师,吴咏炜老师,李建忠老师都建议要看,还给了其他一些中肯的建议,另外有一位参会大叔也答复了好多问题,满满的正能量。当时李建忠老师也说了一件事,2005年第一次c++大会时,陈硕来参加大会,就在第二次大会作了翻译工作,据说云风大哥对陈硕老师的评价很高。可我却在网上看到陈硕老师当年自己说六级还没过,关键是他还跟侯捷老师一起翻译了一本书,怎么感觉有点说不通啊?求陈硕老师出来解释下,哈哈。不是我黑陈硕老师,我也是他的粉。总体而言,参加这次会议,开了眼界,也认识了一些大牛,给自己好多养分,值得,下次应该还会参加!后来在回北京的路上看到群里边一位大叔级别的c++程序员和吴咏炜老师还有其他人在讨论一些他们那个时代的故事,真是每一代程序员都有那一代的回忆,总之我是满满的感动,这次大会也把我喂的饱饱的,能消化多少就要看自己的造化了,最后还是要谢谢这次大会的举办方,博览公司。非常棒的一次体验。
以上均是我个人的一面之词,若言语之间充满错误,恳请指出。
朱月俊 2016/10/31 于中国北京
jayzhu1215@gmail.com
新浪微博jayzhu1215