標籤:java 使用 os 資料 for 問題
先說分散式運算和並行計算的異同:
解決對象上:都是大任務化為小任務,這是他們共同之處。
但是分布式的任務包互相之間有獨立性,上一個任務包的結果未返回或者是結果處理錯誤,對下一個任務包的處理幾乎沒有什麼影響。因此,分布式的即時性要求不高,而且允許存在計算錯誤(因為每個計算任務給好幾個參與者計算,上傳結果到伺服器後要比較結果,然後對結果差異大的進行驗證,我個人感覺這樣有助於發現科學家們真正想要找的)!
分布式要處理的問題一般是基於“尋找”模式的。所謂的“尋找”,就相當於窮舉法!為了嘗試到每一個可能存在的結果,一般從0~某一數值被一個一個的測試,直到我們找到所要求的結果。事實上,為了易於一次性探測到正確的結果,我們假設結果是以某個特殊形式開始的。在這種類型的搜尋裡,我們也許幸運的一開始就找到答案;也許不夠走運以至於到最後才找到答案,這都很公平。
這麼說,並行程式平行處理的任務包之間有很大的聯絡,而且並行計算的每一個任務塊都是必要的,沒有浪費的分割的,就是每個任務包都要處理,而且計算結果相互影響,就要求每個的計算結果要絕對正確,而且在時間上要盡量做到同步,而分布式的很多任務塊可以根本就不處理,有大量的無用資料區塊,所以說分散式運算的速度儘管很快,但是真正的“效率”是低之再低的,可能一直在尋找,但是永遠都找不到,也可能一開始就找到了;而平行處理不同,它的任務包個數相對有限,在一個有限的時間應該是可能完成的。
分散式運算提出了一個讓工作站端能夠在後台持許工作的方法,而使用者完全不需關心任何東西。這種實現基於兩個原則,其一是任務連續分配和空閑優先權,其二是寫一個螢幕保護裝置程式。現在的發送器已經不錯了,而空閑優先任務將在人們完全不用關心任何東西的情況下自動執行。利用螢幕保護裝置程式可以利用電腦閑置的時間計算工作任務。
分布式的編寫一般用的是C++(也有用JAVA的,但是都是娛樂性質的項目了,不是主流),基本不用MPI介面。並行計算用MPI或者OpenMP。如果把格線運算算做分散式運算(格線運算是分散式運算的一種特例,但是有區別,區別僅僅在編程方法和實際應用的範圍上),格線運算使用中介軟體!而且對連網的各台電腦的作業系統的要求比較特殊。
格線運算是分布式運算的進化型,每個人開啟電腦,網格就像電力網一樣,可以用起來,你把CPU能力貢獻出來,那麼你可以用全世界的CPU之和。詳細的說,就是:電腦群組成的網格類似於輸電網:當我們使用電器的時候,從來沒有關心電力來自哪個發電廠,以及經過了什麼電壓變換。我們只是簡單的把電器插入牆壁上的電源插座。然而隱藏在插座後面的則是許多發電廠和把它們串連在一起的輸電線路。電腦網格模仿了輸電網。當你把一台電腦接入電腦網格的時候,就相當於尋求使用電腦網格的“計算力”。你不用關心資料是由什麼電腦儲存和計算的,正如你並不關心電源插座後面的故事。格線運算就如同建立電腦的輸電網。一個發電廠多餘的發電能力可以通過輸電網傳送給遠方的城市使用者,一台電腦多餘的計算能力遠可以通過計算網格,讓遠方的使用者加以利用。
照上面的說法,我個人的理解是,分散式運算是將大任務化分為小任務,各台參與計算的電腦之間是在物理地區上的分布,一般有伺服器作為“中央”,參與計算的電腦不用瞭解工作原理,僅僅只是就自己感興趣的項目做貢獻而已,注意,是“向別人”無償的做貢獻,不是自己“直接”受益;而格線運算是自己“直接”受益的,她通過一個平台允許你調用別人電腦的處理資源,而別人根本就不知道你在用他的資源!這就是說,分散式運算是你和其他人一起組成“一台”專供某些科研組織使用的超級處理機,格線運算是將所有網內其他人的電腦組成一台專供你自己使用的超級處理機。
分散式運算強調參與的電腦自願參與!!!格線運算平台暗箱操作,不管別人是否願意,只要聯入網內,就要成為另外某人的“處理機”!!!
分布式更偏向於計算任務的分解!將計算任務化整為零,將大家的處理能力化零為整;格線運算更偏向於計算能力的集中!相當於集百家之精華,融你一人之薈粹!!
分布式系統的最主要的特點是整個系統中的各電腦對使用者都是透明的。也就是說,對使用者來說,這種分散式運算機系統就好像只有一個電腦一樣。使用者通過鍵入命令就可以運行程式,但使用者並不知道是哪一個電腦在為他運行程式。是作業系統為使用者選擇一個最合適的電腦來運行其程式,並將啟動並執行結果傳送到合適的地方。這些都不需要使用者的幹預。
Wikipedia的解釋:
雲端運算(cloud computing,分散式運算技術的一種,其最基本的概念,是透過網路將龐大的計算處理常式自動分拆成無數個較小的子程式,再交由多部伺服器所組成的龐大系統經搜尋、計算分析之後將處理結果回傳給使用者。透過這項技術,網路服務提供者可以在數秒之內,達成處理數以千萬計甚至億計的資訊,達到和“超級電腦”同樣強大效能的網路服務。
最簡單的雲端運算技術在網路服務中已經隨處可見,例如搜尋引擎、網路信箱等,使用者只要輸入簡單指令即能得到大量資訊。
未來如手機、GPS等行動裝置都可以透過雲端運算技術,發展出更多的應用服務。
進一步的雲端運算不僅只做資料搜尋、分析的功能,未來如分析DNA結構、基因圖譜定序、解析癌症細胞等,都可以透過這項技術輕易達成[1]。
稍早之前的大規模分散式運算技術即為“雲端運算”的概念起源
IT專家網的解釋:
“雲端運算”(Cloud Computing)是分散式處理(Distributed Computing)、平行處理(Parallel Computing)和格線運算(Grid Computing)的發展,或者說是這些電腦科學概念的商業實現。許多跨國資訊技術行業的公司如IBM、Yahoo和Google等正在使用雲端運算的概念兜售自己的產品和服務。
雲端運算這個名詞可能是借用了量子物理中的“電子云”(Electron Cloud),強調說明計算的瀰漫性、無所不在的分布性和社會性特徵。量子物理上有“電子云(electron cloud)”,在原子核周圍運動的電子不是一個經驗世界的軌道例如像天體一樣的運行軌道,而是瀰漫空間的、雲狀的存在,描述電子的運動不是牛頓經典力學而是一個機率分布的密度函數,用薛定諤波動方程來描述,特定的時間內粒子位於某個位置的機率有多大,這跟經典力學的提法完全不同。
電子云有以下特性,概然性、瀰漫性、同時性等等,雲端運算可能的確是來自電子云的概念,前今年就有所謂“無所不在的計算”,IBM有一個無所不在的計算叫“Ubiquitous “,MS(Bill)不久也跟著提出一個無所不在的計算“Pervade“,現在人們對無所不在的計算又有了新的認識,現在說是”Omnipresent “。但是,雲端運算的確不是純粹的商業炒作,的確會改變資訊產業的格局,現在許多人已經用上了Google Doc和Google Apps,用上了許多遠程軟體應用如Office文書處理而不是用自己本地機器上安裝這些應用軟體,以後誰還會花錢買Office軟體呢?還有許多公司專屬應用程式如電子商務應用,例如要寫一個交易程式, Google的企業方案就包含了現成的模板,一個銷售人員根本沒學習過Netbeanr也能做出來。這種計算和產業動向是符合開源精神的,符合SaaS(Software as a Service)趨勢。
現在有這樣的說法,當今世界只有五台電腦,一台是Google的,一台是IBM的,一台是Yahoo的,一台是Amazon的,一台是Microsoft的,因為這五個公司率先在分散式處理的商業應用上捷足先登引領潮流。Sun公司很早就提出說“網路就是電腦”是有先見之明的。
Adaptive In Organizations的解釋
“Computing in the cloud” is one name for services that run in a Web browser and store information in a provider’s data center — ranging from adaptations of familiar tools such as email and personal finance to new offerings such as virtual worlds and social networks.
“雲端運算”是一個很時尚的概念,它既不是一種技術,也不是一種理論。準確說,雲端運算僅描述了一類棘手的問題,因為現在這個階段,“計算與資料”蹺蹺板的平衡已發生變化,即已經到“移動計算要比移動資料要便宜的多(Moving computation is cheaper than moving data)”。
“資料”變得越來越臃腫,用經濟的眼光看,“資料”應該“固定”下來。想像一下,複製1PiB(1PiB = 1024TiB)資料的成本以及儲存這些資料的成本,資料變來變去而導致的“一致性”問題。諸如搜尋、推薦和社會關係網路等這些“新興”的服務是很耗費“資料”的,例如,看似一個簡單搜尋請求,卻依賴於一個規模極為龐大的索引資料,處理後輸出卻很小。輸入輸出的資料規模遠遠小於計算的資料處理規模,幾百個KiB相對幾個PiB,保守點“1 : 1000,000”。
比例問題還好理解,然而問題關鍵卻是雲內的資料與資料之間的關係,即“資料的劃分問題”。儘管“分而治之”是一個古老的原則,而且分布計算也已經發展了四十多年,然而對這一點,我們的認識依然淺的很。
“雲端運算”代表了一個時代需求,反映了市場關係的變化,誰擁有更為龐大的資料規模,誰就可以提供更廣更深的資訊服務,而軟體和硬體影響相對縮小。