维度――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/ 如无法看到,可等我们的组织者整理完毕放到一个合适的位置,敬请关注。如果你需要不带水印的高清图像或者不想出现在相册中,请及时与我联系,谢谢。
维度――Beijing Openparty2010年8月清雨榕香后记相关推荐
- 风柔月清,吾爱在浅秋
风柔月清,吾爱在浅秋 夏末初秋,思念的季节.我却用心感受着浅秋特有的温暖,澄澈而宁静,独尝浅秋况味,记录属于自己的点滴思绪,是夜唯安. ---题记 (一)吟秋 身在南方,总感秋天来的很迟.经常觉得当自 ...
- 计算机英语清考,天大2018年10月清考《计算机应用基础》在线考核试题答案
2018年10月清考<计算机应用基础>在线考核试题-0021 试卷总分:100 得分:0 一. 单选题 (共 50 道试题,共 100 分) 1.输出速度最快的打印机是( ) A.点 ...
- 清雨的自助餐(斐波那契数列的应用)
爱奇艺 2019校招 Android方向试卷在线考试 编程题|20.0分2/2 清雨的自助餐 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C++语言 131072KB ...
- 2019届爱奇艺秋招笔试题【局长的食物】【清雨的自助餐】【库特君的面条】
局长的食物 1.题目描述 每天局长会吃一份食物,或者买一份食物(即每天只能进行吃或买其中的一种动作),这样过了M天现在局长想知道M天后第p种食物的份数排名(从大到小,相同算并列,例如3 3 2,则 ...
- 7月清北学堂培训 Day 5
今天是钟皓曦老师的讲授~ 动态规划 动态规划的三种实现方法: 1.递推: 2.递归: 3.记忆化: 举个例子: 斐波那契数列:0,1,1,2,3,5,8-- Fn = Fn-1 + Fn-2 1.我们 ...
- 8月清北学堂培训 Day4
今天上午是赵和旭老师的讲授~ 概率与期望 dp 概率 某个事件 A 发生的可能性的大小,称之为事件 A 的概率,记作 P ( A ) . 假设某事的所有可能结果有 n 种,每种结果都是等概率,事件 A ...
- 7月清北学堂培训 Day 1
基础算法 1. 模拟算法 面向测试算法 模拟算法的关键就是将人类语言翻译成机器语言. 要做到以下两点: 1.优秀的读题能力: 2.优秀的代码能力: 程序流程图: 读入,循环处理指令,输出: 读题是很重 ...
- 《Java Web开发实战经典》李兴华 王月清 第五章5.7.3 例5.26
例5.26 登陆表单项–login.htm 删除以下代码: <%@page contentType="text/html" pageEncoding="GBK&qu ...
- 爱奇艺2018.9.28笔试 清雨的自助餐
题目描述 有N种食物,排成一排,选择里面的若干食物,但不能选择相邻的食物.一个也不选也是一种选择的方法. 问有多少种选择的方法? 输入: 一个整数n 输出: 一个正整数表示答案 样例输入: 3 样例输 ...
最新文章
- 一种比较省内存的稀疏矩阵Python存储方案
- java native内存_android java内存与native内存
- Log.isDebugEnabled()使用场景
- python 表格处理软件_基于Python的Excel处理工具
- WEB接口测试之Jmeter接口测试自动化 (三)(数据驱动测试) 接口测试与数据驱动...
- 均方根误差有没有单位_1千万年仅误差一秒,这台钟直接影响北斗卫星的导航定位精度...
- 0x00000000指令引用的内存不能为written_JVM03——对象实例化,内存布局,访问定位...
- 行政管理对计算机的要求,信息技术对行政管理的影响.doc
- Python实现计算图像RGB均值
- C#使用RabbitMQ(转)
- c语言矩阵键盘反转法扫描,行列扫描法,反转法,状态机法三种矩阵键盘扫描方法详解 带程序...
- ESP32 学习笔记(二十九) ESP32 低功耗模式
- 前端之JS篇(七)——Web APIsDOM部分内容
- 计算机硬盘数据如何恢复,怎样进行硬盘数据恢复
- OneZero第四周第二次站立会议(2016.4.12)
- 学云计算比较好的几个论坛
- java web jsp页面跳转,【体育竞投网】-√[官网线路检测]
- python读取千万级数据库数据类型_Python 基于Python从mysql表读取千万数据实践
- 嵌入式linux之yocto(五)拓展核心镜像
- HCNA网络技术基础学习
热门文章
- docker从零开始网络(三) overly(覆盖)网络
- [转载]上百部BBC经典纪录片在线欣赏
- 微信小程序获取屏幕宽度以及元素的宽高
- 魅蓝usb计算机连接网络设置,魅族连接电脑无法识别怎么办_魅族手机usb无法连接电脑的解决方法...
- python爬朋友圈数据_第2天|10天搞定Python网络爬虫,爬段子,发朋友圈
- 抖音短视频快速创作,抖音怎么剪辑不算搬运
- vs自带工具进行代码数字签名方法
- Java中的多线程基本介绍
- coreldraw课表设计作品_想学平面设计苦于没有软件和教程?设计师必备五大软件送你安装...
- 苹果明日发布第二财季财报 此前预计营收550到590亿美元