维度――Beijing Openparty2010年8月清雨榕香后记

“一个系统就是对世界的一种看法”

“系统是一个集合”

“如果在同一时刻两个系统处于状态空间的同一位置,那么空间是因为维度过低,即视图是不完全的”

“如果要恢复由于投影而丢失的信息,我们就必须从其他渠道获得系统的信息,也就是关于消失的其他维度的信息。”

 

      
――《系统化思维导论》
.
温伯格

 

正所谓“饮如长鲸吸百川,衔杯乐圣称世贤”,我们的
Openparty
参加人数在大家的努力下又创出了新高,也吸引了各方面的社区和团队,给大家带来了更多的新鲜事,这点我们都快赶上传说中的青旅了,呵呵。

伴随逐渐扩大的影响力,我们的组织者一起合作开发的新网站也开始正式运行,报名、投票、签到,在此也代表大家对他们的辛勤汗水表示敬意。

–>–>
–>

 

从这次活动开始,
Google
中国正式成为
Openparty
的特约赞助商,这也为我们的活动带来了更强的后盾和机会,所以这次的活动纪念品少不了
Google
元素,当然也有精彩的技术话题。

–>–>
–>

这次参加活动的美女也是有史以来井喷的一次,害得我举着镜头都不知道先拍哪个好,所以一会看活动的照片,一定要选择一个
GF
或者
LP
不在你身后的时间,否则

有美女,当然也会有我们的乐队,小胖童鞋如约为大家带来了一支优美的撒斯克

错了是萨克斯名曲,
yeah
,貌似就差红酒了

–>–>
–>

      
由于新网站的逐渐稳定,我能很方便的预习每次的
topic
,并为自己感兴趣的投上一票并做准备,所以,我早早的就盯紧了“多核时代的高性能
Java
开发”和“南极禅院”,所以

拍完照片,我就一头扎进了他们的话题中。

      
第一个是
James
带来的“多核时代的高性能
Java
开发”,其实这对于很多人来说可能是一个“敏感”话题,因为性能一直是很多人诟病
Java
的利器,
Java
就一定是低效的代名词?那听了这个话题我们就有答案了,而且答案很简单。

       Java
是从更上层(相对于底层的语言)的维度去解决问题,所以为了保证下层的稳定和适应性,性能的考虑变得相对次要;另外,由此带来的便捷也很容易就让人们忽略对性能的优化和深究意识,所以说,到目前为之,在纯粹的执行效率方面,
Java
确实慢,但不是人们想到和看到的这么慢,其中一个重要的原因就是,我们的
Java
程序还停留在单核时代,多核带来的好处并没有帮助(甚至负面影响)到程序的性能,所以,
James
此次来是告诉我们,事情远没有人们想象的那么糟。

      
多核意味着并行,并行则意味着资源共享,那么关于锁、临界、线程

是我们不得不考虑的问题,而这些抽象又晦涩的概念,如何让我们准确定位呢?工欲善其事必先利其器,那首先,是一些工具的展示。

       James
为我们展示了三个工具:
Java Lock Monitor

JLM
)、
Multi-core SDK

MSDK
)和
AIX
Performance Tools

,前两个是运行在
jvm
下的,后者则是
native
的程序。

       Java
Lock Monitor


JLM
)用于分析和展示
Java
程序中锁的使用情况,以方便我们优化线程锁的使用,充分利用
CPU
资源。

       Multi-core
SDK


MSDK
)是可视化(图形化)的
Java
线程资源情况分析工具,利用这个工具我们可以很直观的看到进程内各种资源的使用时间、依赖关系。

       AIX
Performance Tools

则是一个强大的
binary
分析工具,由于脱离了
jvm
的环境,它的分析能力更加通用和强大。

      
有了好的工具,我们下一步就要用它们优化我们的程序,那么基于这些工具,最常见的优化无非就是对锁和线程的调度和合理安排,具体如下:

–>1、 


使用实例锁而非类锁。

–>

比如:

       public synchronized

void foo1(int k){

              String key = Integer.toString(k);

              String value = key+”value”;

              if(null == key){

                     return;

              }else{

                     maph.put(key, value);

              {

}

      
此时加的是类锁,我们只要改成

       public void foo1(int k){

              String key = Integer.toString(k);

              String value = key+”value”;

              if(null == key){

                     return;

              }else{

                     synchronized

(this){

                            maph.put(key,
value);

}

              }

}

      
就可以把时间损耗降低
25%

–>2、 


使用细粒度锁。即,对共享资源加锁而非方法(实质是对象锁)

–>

比如:

       public synchronized

void addUser1(String u){

              users.add(u);

}

 

       public synchronized

void addQuery1(String q){

              queries.add(q);

}

      
实质是加了类锁,导致线程等待时间产生无谓的浪费,那么我们可以改成

       public void addUser2(String u){

synchronized

(users)

                     users.add(u);


}

 

       public void addQuery2(String q){

              synchronized

(queries){

queries.add(q);

                     }

}

      
经过这样优化,时间消耗降低了
67%

–>3、 


锁定元素而非集合。

–>

比如:

       public synchronized void put1(int index,
String k){

              share[index] = k;

}

      
可以改为

       public void put1(int index, String k){

synchronized(locks[index%N_LOCKS]){

                     share[index] = k;

}

}

      
时间降低
66%
的损耗

–>4、 


使用原子
Atomic
系列类型进行无锁编程。

–>

具体可见
AtomicLongArray
的用法(此用法在
JDK1.5+
里可用)

      
讲了这么多,其实问题的关键点就在共享资源的调度和使用,其中一个原则就是,共享资源越少越好,线程间交互越少,效能越高。这也是在提醒我们程序员,好程序不单单决定于语言。

 

      
最后的话题“南极禅院”,廖海仁兄(名字为三个字)为大家带来了另一个与众不同的视角,也让我们有机会用另外的维度去看这个世界。

      
作为一个挑战生存极限的极端世界,我们的南极科考站却是一个对人性历练的地方,这里不但有肥肥的海豹,可爱的企鹅,也有我们人类在此静心的思考。

      
廖兄为大家展示了南极的各种奇异的景观、动物、植物,照片里我们看不到一点世俗的痕迹,就连这些在世俗中浸泡了几十年的人来说,那里也是一个禅院,原始、清净、共产、平等,用他的话说,是一个原始社会和共产社会的结合体。

      
他对比了南极社会(小团体其实代表了一个社会)和现代社会的极大的不同,也给大家带来了一些南极社会学的思考:

–>1、 


永远不要抱怨,不要当一个愤世嫉俗者。我们不是旁观者。

–>

–>2、 


不要企图去改变不可改变的东西。

–>

–>3、 


服务意识、合作精神与专业技能一样重要。大社会通常会掩盖这一点。

–>

–>4、 


选择团队成员要非常谨慎。

–>

–>5、 


快乐的秘诀是自己。

–>

–>6、 


谁才是最重要的人?身边的人。

–>

另外他也跟大家分享了一些心理的感受,包括如何调节自己和同伴的关系、读书贵在精而非多、读书要慢慢读用心读、不要接收太多的信息以免被掩盖的真正的思考。

总之,从他的身上我们可以看到人性的另一个角度,也能感受到他口中“为了搞清人为什么活着”这句话的分量。

最后让我来解释一下本文一开始引用的几句话,我们接触的复杂事物都能叫做一个系统(软件、经济、生活

),系统是多维的,但认知是有限的,就像我们每个人,常常因为没有足够的维度而感到困扰。我们只有从足够(相对足够)的维度观察,才能完整的认识身边的世界,每当接触到一个新的维度,就加深了一次对世界的认知能力,而
Openparty
恰恰为我们提供了一个多维的平台,我们可以学习别人的维度,分享自己的维度,最后成为一个“超级观察者”(《系统化思维导论》
.
温伯格)。

活动照片已经上传,有梯子的童鞋可以移驾:
http://www.flickr.com/photos/41954905@N06/sets/72157624883621674/

如无法看到,可等我们的组织者整理完毕放到一个合适的位置,敬请关注。如果你需要不带水印的高清图像或者不想出现在相册中,请及时与我联系,谢谢。

 

标签:
文章分类 openparty
1 条评论在 “维度――Beijing Openparty2010年8月清雨榕香后记” 上
  1. wuzhengxuan 说道:

    Atomic 系列类型不会使,悲剧

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

点赞
如果您觉得很赞,我将非常乐意接受虚拟币的捐赠,以示您对我的肯定。

比特币钱包地址:
1PqpqA8FyH3NbfCrbcRd1YxQk3LEsSEYDV
莱特币钱包地址:
LRTdmovGGVEHCKWz7JdL9aiB7VZkuNycJf
站点勋章
网站统计