帆's profile被我遗忘的时光PhotosBlogListsMore ![]() | Help |
被我遗忘的时光只有淡忘,从前话说要如何 只有顽强,明日路纵会更彷徨
|
October 17 矩阵的并行运算最近正被项目的并发问题搞得焦头烂额,在封装的语义和项目需求上似乎都出现了问题,迟迟实现不了。昨天无意中看到这个招聘题,挺有意思的。出题人的本意可能是想考考时下流行的并行运算,受限于CPU,在PC上这种纯运算的效果并不明显,但并发倒是以后的一种趋势… 首先定义一个类,就叫做MatrixSolver吧
package fyting.javaeye.com; public class MatrixSolver { private final int[][] matrix; private final int maxThreads; private final Map<Integer, Integer> results = Collections.synchronizedMap(new TreeMap<Integer, Integer>()); public void start(){ //... } } 写一个main方法来测试: public static void main(String[] args) { final int row = 5000, column = 2000; final int[][] data = new int[row][column]; for(int i = 0 ; i < row; i++) { for(int j = 0; j < column; j++) { data[i][j] = j; } } final int maxThreads = 3; MatrixSolver solver = new MatrixSolver(maxThreads, data); solver.start(); } 然后是实现的代码,利用JDK5的线程池,可以很轻松实现: public void start() { ExecutorService executor = Executors.newFixedThreadPool(maxThreads); final long st = System.nanoTime(); if(this.matrix.length == 0) { System.err.println("no matrix data!"); return; } final int columnCount = this.matrix[0].length; //创建一个计数的latch,用来等待运算结果 final CountDownLatch latch = new CountDownLatch(columnCount); for(int i = 0 ; i < columnCount; i++) { final int column = i; executor.execute(newTask(column,latch)); } try { latch.await();//等待运算完毕,否则会一直wait在这里 executor.shutdown(); long et = System.nanoTime(); long time = (et - st) / (1000*1000); System.out.println("success, time: " + time + "ms"); executor.awaitTermination(1, TimeUnit.SECONDS); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println("maxtrix: " + (matrix.length + "*" + matrix[0].length)); System.out.println("column0==>" + ArrayUtils.toString(matrix[0])); System.out.println("results==>" + results); } protected Runnable newTask(int column, CountDownLatch latch) { return new ColumnSolver(column,latch); } private class ColumnSolver extends Thread { private final int columnIndex; private final CountDownLatch latch; ColumnSolver(int columnIndex, CountDownLatch latch) { this.columnIndex = columnIndex; this.latch = latch; } @Override public void run() { int count = 0; for(int j = 0, rowCount = matrix.length; j < rowCount; j++) { count += matrix[j][columnIndex]; } results.put(columnIndex, count); latch.countDown();//计数器减1 } } September 22 都别装了,难道你们都懂SOA吗曾经想努力搞懂啥叫SOA,因为某著名杂志曾写到21世纪不懂SOA的软件开发人员无法生存。结果,我真的太肤浅,看来看去,技术上的东西就那几种,也远远达不到各方所宣传的效果,只是对原有的经验的一个总结和标准化。所以,看上去的SOA就什么都是,它是一种架构,是一种解决了N多问题的方案,一种设计理念,一种软件的构建方法,它,还可以是一种或多种产品…… public class CalculatorService { private AddService addService; @Reference public void setAddService(AddService addService) { this.addService = addService; } public double add(double n1, double n2) { return addService.add(n1, n2); } }
你看出什么来没有,这代码似曾相识啊,这就是一标准的策略模式的实现。不要一提设计模式就露出一副鄙视的样子,好吧,这不是Spring里多年前的IOC啊、DI啊啥的?你看,这还真能忽悠。(这也挺搞的,以前很多人搞设计模式,结果自己把自己忽悠了。现在搞SOA,又有人把自己忽悠了,而且被设计模式给忽悠了) SOA,至少是现在我自己了解到的SOA,就是个把各种东西揉在一起,换个马甲,然后开始卖概念,顺便把产品也送出去。这也不要技术人员懂,就是卖给IT经理之类的(记得是O6z大叔这么说的?)。从技术的角度提出,然后让技术人员看不懂,却给不搞具体技术的人看,然后得出某种极其先进、深不可测、变幻万千的结论,真是…… 上次某厂商来成都时我专门去听了,我承认浪费了半天时间。其中有个印象比较深刻的: 提到这个厂商能做到与IBM、BEA之流一起制定标准,实属不易。但人家也从不亲口提民族产业,人家只说合作。到最后不知道是有人被忽悠了还是咋的,在提问时说道:以后SOA会分为微软阵营和其他厂商阵营,还举例使用WCF的例子,说这就被绑定了,用WCF就被绑上微软了。微软自然是人人喊打的,于是最终演变为一场支持国产软件的活动,为民族软件而自豪,这是有人亲自发短信,在现场的短信大屏幕上出现的。我问道:用那啥SOS就不绑定了吗?无解。 一时兴起,言辞太偏激,本来想作为回帖的,但还是贴到个人博客上比较好,好久没打这么多字了,正好凑一篇。:) 到处写blog真是累,幸好有windows live writer和一堆插件,微软的window-live总算做出个有用的东西。MSN空间上冷冷清清,也贴上…… August 12 当如何人的一生会走过很多十字路口,会面临许多选择。有时候在路口彷徨,不知道该如何选择,该选择什么;有时候选择了,却后悔了;有时候知道正确的路,却无可奈何,摇摇头,往另一边走去;有时候选择了,却错了;而有时候知道是错的,仍不回头;有时候看似正确,却被岁月无情嘲笑。我常常在思考,该如何抉择,可得不出确切的答案,在人来人往的十字路口,一片茫然。最后,按照抛硬币的方式:如果欣然接受,那表明内心就是如此;如果总是不愿相信结果,一遍又一遍地抛,那,另一面正是心中所期望的。也许,人该随性而为吧。谁都不能预知未来,只要在选择的一刹那,无怨无悔。走自己的路,让时间去解读吧。 July 31 做人不能这么无耻反垄断法就要实施了,各种跳梁小丑又走上了舞台。 http://www.evermoresw.com.cn/webch/news/detail.jsp?type=office&id=992
而这个记者也挺搞笑,暴风影音的也被拉出来了 http://tech.163.com/08/0731/01/4I55OAEP000915BD.html
看吧,又开始打爱国牌了。闹吧闹吧,一起搞强大的IPV9。 July 25 最近很忙……最近忙得不行,具体在忙什么搞不清楚,只是忙得团团转,一股无形的压力让我喘不过气。周日时我放弃了,本来可以给上面一次完美的表现,但我还是放弃了这个机会,管他妈的,爱咋咋样。自己嘲笑自己知其可为而不为之,知其不可为而为之,呵呵。也许是太压抑,我开始重新玩仙剑四。通关后,不由得沉浸在那充满淡淡哀伤而又凄美的结局里,随着主题曲一起廻梦游仙。总是很喜欢这种青涩的味道,纯真的友情、爱情,也许我真的适合生活在幻想中,抑或为了弥补残破的记忆。
花开花落花满天情来情去情随缘
雁去雁归雁不散潮起潮落潮不眠 夜深明月梦婵娟千金难留是红颜 惯看花谢花又开却怕缘起缘又灭 冰封的泪 如流星陨落 跌碎了谁的思念
轮回之间 前尘已湮灭 梦中模糊容颜~
昆仑巅 江湖远 花谢花开花满天
叹红尘 落朱颜 天上人间
情如风 情如烟 琵琶一曲已千年
今生缘 来生缘 沧海桑田 成流年
古老的剑 斩断了宿怨 唤醒了谁的誓言
转瞬之间 隔世的爱恋 追忆往日缱绻
昆仑巅 浮生远 梦中只为你流连
笑红尘 画朱颜 浮云翩跹
情难却 情相牵 只羡鸳鸯不羡仙
今生缘 来生缘 难分难解
情难却 情相牵 只羡鸳鸯不羡仙
今生恋 来生恋 莫让缠绵 伤离别 |
||||
|
|