<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-7  評論-9  文章-0  trackbacks-0

    第1章   介紹

        編寫正確的程序難,編寫正確的并發(fā)程序更難。與串行程序相比,在并發(fā)程序中有更多容易出錯的東西。那么,為什么我們要關(guān)心并發(fā)呢?線程是Java語言的一個不可忽視的特性,使用線程可以將復(fù)雜的異步代碼調(diào)整為簡單直線式代碼,從而簡化復(fù)雜系統(tǒng)的開發(fā)。此外,線程是開發(fā)利用多處理器系統(tǒng)計算能力最容易的方式。隨著處理器數(shù)量的增加,有效地利用并發(fā)將變得越來越重要。

    1.1     并發(fā)的(非常)簡短歷史

    在過去,計算機(jī)沒有操作系統(tǒng);計算機(jī)從開始到結(jié)束僅執(zhí)行一個單一程序,此程序直接訪問機(jī)器的所有資源。如此情況,不但編寫運(yùn)行于裸機(jī)上的程序是困難的,而且某一時刻僅運(yùn)行一個單一程序也是對昂貴而稀缺的計算機(jī)資源的低效使用。

    操作系統(tǒng)發(fā)展到允許多個程序同時運(yùn)行,每個進(jìn)程中運(yùn)行一個獨(dú)立的程序:程序是隔離的,獨(dú)立執(zhí)行的,操作系統(tǒng)為程序分配像內(nèi)存、文件句柄和安全證書這樣的資源。如果進(jìn)程需要與另一個進(jìn)程通信,可以通過各種粗粒度的通信機(jī)制:套接字(socket)、信號處理器(signal handlers)、共享內(nèi)存(shared memory)、信號量(semaphores)和文件(files)

    多種促進(jìn)因素推動操作系統(tǒng)允許多個程序同時執(zhí)行:

    資源利用。程序有時候必須等待像輸入或輸出這樣的外部操作,而等待期間又不能做一些有用的工作。利用這段等待時間讓另外一個程序運(yùn)行顯得更有效。

    公平。多個用戶和應(yīng)用程序可能對機(jī)器資源有平等的要求。讓多個程序通過細(xì)粒度的時間片共享計算機(jī)比讓一個程序運(yùn)行完再啟動另一個程序更可取。

    便利。編寫多個程序,每個程序執(zhí)行一個單一任務(wù),在必要的時候讓它們互相協(xié)調(diào),這要比編寫一個執(zhí)行所有任務(wù)的單一程序更容易,更令人滿意。

    在早期的分時系統(tǒng)中,每個進(jìn)程就是一個虛擬的馮諾依曼計算機(jī);進(jìn)程有一個存儲指令和數(shù)據(jù)的內(nèi)存空間,根據(jù)機(jī)器語言的語義順序執(zhí)行指令,通過操作系統(tǒng)的一組I/O原語與外界交互。對于每條執(zhí)行的執(zhí)令都有一個對“下一條指令”清晰的定義,并根據(jù)指令集的規(guī)則控制程序流程。今天幾乎所有廣泛使用的編程語言都遵循串行編程模型,在其語義規(guī)范中明確定義了在一個特定動作執(zhí)行之后“下一個動作是什么”。

    串行編程模型既直觀又自然,因為它模仿了人類的工作方式:一次只做一件事,大多數(shù)時候是按順序去做的。起床,穿上睡衣,下樓,開始準(zhǔn)備茶點(diǎn)。就像在編程語言中一樣,這些現(xiàn)實(shí)世界中的每個動作都是一個細(xì)粒度動作序列的抽象----打開櫥柜,選一款茶葉,取適量放入茶壺,看水壺中是否有足夠的水,如果沒有則在水壺中加一些水,把水壺放到爐子上,打開爐子,等水燒開,等等。最后一步----等水燒開----也意味著某種程度的異步。在水加熱的過程中,你可以干等,也可以在此時做一些其他任務(wù),例如開始烤面包(另一個異步任務(wù))或者取份報紙回來,同時要知道得留意水壺。水壺和烤箱的生產(chǎn)廠商了解他們的產(chǎn)品經(jīng)常在異步方式下使用,所以當(dāng)水壺或烤箱完成工作時會發(fā)出聲響信號。找出串行和異步之間適當(dāng)?shù)钠胶馔ǔJ歉咝耸康奶卣?---程序也是如此。

    相同的關(guān)注點(diǎn)(資源利用,公平和便利)不僅激發(fā)了進(jìn)程的發(fā)展,也促進(jìn)了線程的發(fā)展。線程允許程序控制流的多個分支共存于一個進(jìn)程中。線程共享進(jìn)程范圍內(nèi)的資源,例如內(nèi)存和文件句柄,但每個線程有自己的程序計數(shù)器,堆棧和本地變量。線程也提供了在多處理器系統(tǒng)上對硬件并行利用的自然分解(譯注:以線程為單位有效分配硬件資源,發(fā)揮出硬件并行的優(yōu)勢);在同一個程序中的多個線程可以在多個CPU上同時調(diào)度。

    線程有時稱為輕量級進(jìn)程,大多數(shù)現(xiàn)代操作系統(tǒng)都將線程,而不是進(jìn)程,作為調(diào)度的基本單位。

    posted on 2011-08-24 18:01 jeffma 閱讀(2191) 評論(2)  編輯  收藏

    評論:
    # re: Java并發(fā)編程實(shí)踐 第1章(翻譯) 2011-08-24 18:15 | gaohongyan
    老大你想做什么!
    這本書已經(jīng)翻譯過了吧  回復(fù)  更多評論
      
    # re: Java并發(fā)編程實(shí)踐 第1章(翻譯) 2011-09-01 13:12 | 大道至簡
    恩,支持!  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产卡一卡二卡三免费入口| 麻豆成人久久精品二区三区免费| 日韩欧毛片免费视频| 亚洲视频在线一区| 免费A级毛片无码视频| 老色鬼久久亚洲AV综合| 18级成人毛片免费观看| 亚洲成人在线免费观看| 9久9久女女免费精品视频在线观看| 亚洲精品成人网站在线播放| 在线观看无码AV网站永久免费| 亚洲综合无码一区二区痴汉| 女人18毛片特级一级免费视频| 亚洲AV永久无码精品网站在线观看| 国产成人免费a在线视频色戒| 国产亚洲精品欧洲在线观看| 亚洲男人天堂2020| 国产拍拍拍无码视频免费| 亚洲天堂中文字幕| 成年男女免费视频网站| 国产亚洲女在线线精品| 亚洲人成77777在线播放网站| 99久久精品免费精品国产| 久久精品国产亚洲av麻豆图片| 全免费a级毛片免费**视频| 黄色一级视频免费| 亚洲电影国产一区| 无码少妇一区二区浪潮免费| 欧洲乱码伦视频免费国产| 亚洲国产综合精品中文第一区| 99在线精品免费视频九九视| 爱情岛亚洲论坛在线观看| 亚洲女同成av人片在线观看| 精品国产污污免费网站aⅴ| 久久久久亚洲国产AV麻豆| 亚洲人成网7777777国产| 国产成人免费高清激情视频| www.av在线免费观看| 亚洲午夜久久久久久尤物| 亚洲国产精品嫩草影院久久| 中文字幕免费在线|