成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java與F#的并行程序處理對比

開發 后端
在Java代碼中,大量的代碼都是用來實現并行化。與之相反的是,F#在處理并行化上只用了兩行代碼。可見,并行程序設計在Java中可不是那么easy。本文針對Java與F#的并行程序處理進行了詳細的講解。

Azul System的Cliff Click博士是多核心JVM系統方面的專家,之前發表了一篇博文,首先比較了Java與C語言和C++的性能表現,但同時也討論了C#和.NET。以下三個Cliffs博士的評論讓人十分感興趣:

在標題"Places where C/C++ beats Java for obvious reasons"下:

“值類型,例如復雜類型,在Java中需要一個類來支持”

"Value Types, such as a 'Complex' type require a full object in Java." - Dr Cliff Click

Cliff忘記提及的是.NET同樣提供值對象和比復數更加引人注意的humble hash table。

考慮一下以10,000,000個整數/單精度浮點數 填充hash表,這個任務可以使用Java來完成,如下:

  1. package hashtablebenchmark;  
  2.  
  3. import java.util.HashMap;  
  4.  
  5. public class Main {  
  6.     public static void main(String[] args) {  
  7.         int n = 10000000;  
  8.  
  9.         for (int j=0; j<10; ++j) {  
  10.             long startTime = System.currentTimeMillis();  
  11.             HashMap hashtable = new HashMap(n);  
  12.  
  13.             for(int i=1; i<=n; ++i) {  
  14.                 hashtable.put(i, 1.0f / i);  
  15.             }  
  16.  
  17.             System.out.println("m[100] = " + hashtable.get(100));  
  18.             long time = System.currentTimeMillis() - startTime;  
  19.             System.out.println("Took: " + time / 1e3 + "s");  
  20.         }  
  21.     }  

同樣的程序在F#中不僅僅代碼更短并且速度要快上17倍:

  1. let n = 10000000 
  2. let m = System.Collections.Generic.Dictionary(n)  
  3. for i=1 to n do 
  4.   m.[i] <- 1.0f / float32 i  
  5. printf "m[100] = %f\n" m.[100

特別值得提及的是,Java初始化花費6.967s、穩態花費5.733s,而F#只用了0.414s。

實際上,F#通過這個測試后我們便想給它更大的工作量,而在這臺4GB內存的機器上,Java不可能再做更多了。

在別處的評論,Cliff也這樣寫到Java:

“有非常好的多線程支持,并行程序設計在Java中很容易實現”

"Very Good Multi-Threading Support. Parallel programming is just easier in Java." - Dr Cliff Click

之后又有:

“并非我如此關注C#而是...我認為JIT編碼處理基本上比Java要慢”

"Not that I track C# all that closely but... I believe the JIT produces substantially slower code than Java" - Dr Cliff Click

允許我們在其他方面來證明,Computer Language Shootout軟包含了一個格式良好的spectral-norm測試,最快的Java解決方案是一個173行的并行程序。其實現用F#來寫只需要24行代碼:

  1. let A i j = 1.0 / float((i + j) * (i + j + 1) / 2 + i + 1)  
  2.  
  3. let inline mul A (u: _ []) (v: _ []) =  
  4.   System.Threading.Tasks.Parallel.For(0, v.Length, fun i ->  
  5.     let mutable vi = 0.0 
  6.     for j = 0 to v.Length - 1 do 
  7.       vi <- vi + A i j * u.[j]  
  8.     v.[i] <- vi) |> ignore  
  9.  
  10. let AtAu u v =  
  11.   let w = Array.create (Array.length u) 0.0 
  12.   mul (fun i j -> A i j) u w  
  13.   mul (fun i j -> A j i) w v  
  14.  
  15. do 
  16.   let n = 5500 
  17.   let u, v = Array.create n 1.0, Array.create n 0.0 
  18.   for i = 0 to 9 do 
  19.     AtAu u v  
  20.     AtAu v u  
  21.   let u, v = vector u, vector v  
  22.   printf "%0.9f\n" (sqrt(Vector.dot u v / Vector.dot v v)) 

在Java代碼中,大量的代碼都是用來實現并行化。與之相反的是,F#在處理并行化上只用了兩行代碼。可見,并行程序設計在Java中可不是那么easy。

Java串行程序初始花費了12.722s穩態花費12.299s,而冷啟動的F#只用了12.18s。在8核 2xE5405 2.0GHz Xeon的機器上,Java并行程序初始化花費1.839s穩態花費1.820s,而冷啟動的F#并行程序只用了1.60s。事實證明,Java在每一個測試中都表明CLR的JIT并不是“處理基本上比Java更慢”

***,Cliff并沒有提到其他兩個設計上(Java性能)的不足。首先,Java的泛型代碼導致性能大幅下降,由于它使用了許多不必要的裝箱操作。其次,JVM棧缺少尾部遞歸支持,這不僅僅對這個函數式編程的年代帶來越來越多的障礙,而且唯一的一般解決方案也比需要的慢上10倍。

 

英文連接:http://fsharpnews.blogspot.com/2010/05/java-vs-f.html

原文鏈接:http://www.oschina.net/news/26564/java-vs-f

【編輯推薦】

  1. Java并發編程之同步互斥問題
  2. Java中String.format的用法
  3. 如何在Oracle中使用Java存儲過程(詳解)
  4. 關于讀寫鎖算法的Java實現及思考
  5. 6個提高Java開發者效率的工具
責任編輯:林師授 來源: 開源中國社區
相關推薦

2009-08-19 09:42:34

F#并行排序算法

2010-01-07 10:04:18

F#函數式編程

2010-04-07 16:51:59

F#

2011-11-17 10:34:44

并行程序

2010-03-26 19:03:19

F#異步并行模式

2010-03-26 18:31:59

F#異步并行模式

2010-03-08 09:17:13

F#異步

2010-01-26 08:25:06

F#語法F#教程

2010-03-16 09:09:04

F#

2009-09-10 14:18:59

Functional F#

2013-12-16 16:49:57

OpenMP

2013-12-16 16:58:47

OpenMP并行

2010-01-15 08:33:13

F#F#類型推斷F#教程

2009-11-16 09:05:46

CodeTimer

2010-03-26 19:22:08

F#代理

2009-08-04 14:23:55

C# Actor

2010-04-06 15:20:56

ASP.NET MVC

2009-08-13 17:39:48

F#數據類型Discriminat

2011-06-09 09:52:41

F#

2009-11-09 17:51:51

F#函數式編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久久人人人人传媒 | 99九九视频| 极品国产视频 | 精品久久不卡 | 精品久久久久香蕉网 | www.日本国产 | 国产一区二区三区视频在线观看 | 国产精品久久国产精品99 | 一区二区三区在线播放视频 | 亚洲综合在线一区二区 | 99精品国产一区二区三区 | 亚洲va欧美va天堂v国产综合 | 亚洲一区二区三区观看 | 国产精品视频免费观看 | 久久最新精品 | 国产成人精品免高潮在线观看 | 日韩福利| 亚洲国产精品一区二区三区 | 国产精品美女www爽爽爽 | 理论片免费在线观看 | 澳门永久av免费网站 | 一级毛片免费 | 九九亚洲 | 三级成人在线 | 一区二区三区在线 | 欧 | 看真人视频一级毛片 | 天天操天天插 | 精品无码三级在线观看视频 | 一区影院 | 亚洲一区二区三区免费视频 | 婷婷福利 | h视频在线播放 | 国产精品久久久久久模特 | 久久一区二区三区四区 | 亚洲不卡视频 | 毛片网站在线观看视频 | 亚洲影音 | 免费国产视频 | 欧美精品一区二区在线观看 | 黄瓜av| 亚洲一区久久 |