弟發現一本很好的java書籍,不敢獨享,在此與大家分享
Java並發編程—設計原則與模式(第二版),本書簡介:
本書全面介紹了如何使用java 2平台進行並發編程,較上一版新增和擴展的內容包括:
·存儲模型 ·取消 ·可移植的並行編程 ·實現並發控制的工具類
java平台提供了一套廣泛而功能強大的api,工具和技術。內建支持線程是它的一個強大的功能。這一功能為使用java編程語言的程序員提供了解並發編程這一誘人但同時也非常具有挑戰性的選擇。
本書通過幫助讀者理解有關並發編程的模式及其利弊,向讀者展示了如何更精確地使用java平台的線程模型。
這里,讀者將通過使用java.lang.thread類、synchronized和volatile關鍵字,以及wait、notify和 notifyall方法,學習如何初始化、控制和協調並發操作。此外,本書還提供了有關並發編程的全方位的詳細內容,例如限制和同步、死鎖和沖突、依賴於 狀態的操作控制、非同步消息傳遞和控制流、協作交互,以及如何創建基於web的服務和計算型服務。 本書的讀者對象是那些希望掌握並發編程的中高級程序員。從設計模式的角度,本書提供了標準的設計技巧,以創建和實現用來解決一般性並發編程問題的組件。貫 串全書的大量示例代碼詳細地闡述了在討論中所涉及到的並發編程理念的細微之處。
㈡ 並行編程技術,什麼是並行編程技術
並行編程通常是指軟體代碼,它促進在同一時間執行多個計算任務的性能。
這有點像有一個操場上有20個滑梯而不是一個。孩子們不必排隊等待輪到自己,因為他們可以同時玩。你可以使用電腦滑鼠,一邊聽在線廣播,一邊更新電子表格中的信息,並對你的個人電腦做病毒掃描,這唯一的理由就是並發編程。
㈢ java jvm 並發和並行的區別
並發(concurrency)和並行(parallellism)是:
解釋一:並行是指兩個或者多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔發生。
解釋二:並行是在不同實體上的多個事件,並發是在同一實體上的多個事件。
解釋三:在一台處理器上「同時」處理多個任務,在多台處理器上同時處理多個任務。如hadoop分布式集群
所以並發編程的目標是充分的利用處理器的每一個核,以達到最高的處理性能。
㈣ 如何使用python實現並發編程
多線程幾乎是每一個程序猿在使用每一種語言時都會首先想到用於解決並發的工具(JS程序員請迴避),使用多線程可以有效的利用CPU資源(Python例外)。然而多線程所帶來的程序的復雜度也不可避免,尤其是對競爭資源的同步問題。
然而在python中由於使用了全局解釋鎖(GIL)的原因,代碼並不能同時在多核上並發的運行,也就是說,Python的多線程不能並發,很多人會發現使用多線程來改進自己的Python代碼後,程序的運行效率卻下降了,這是多麼蛋疼的一件事呀!如果想了解更多細節,推薦閱讀這篇文章。實際上使用多線程的編程模型是很困難的,程序員很容易犯錯,這並不是程序員的錯誤,因為並行思維是反人類的,我們大多數人的思維是串列(精神分裂不討論),而且馮諾依曼設計的計算機架構也是以順序執行為基礎的。所以如果你總是不能把你的多線程程序搞定,恭喜你,你是個思維正常的程序猿:)
Python提供兩組線程的介面,一組是thread模塊,提供基礎的,低等級(Low Level)介面,使用Function作為線程的運行體。還有一組是threading模塊,提供更容易使用的基於對象的介面(類似於Java),可以繼承Thread對象來實現線程,還提供了其它一些線程相關的對象,例如Timer,Lock
使用thread模塊的例子
import thread
def worker():
"""thread worker function"""
print 'Worker'
thread.start_new_thread(worker)
使用threading模塊的例子
import threading
def worker():
"""thread worker function"""
print 'Worker'
t = threading.Thread(target=worker)
t.start()
或者Java Style
import threading
class worker(threading.Thread):
def __init__(self):
pass
def run():
"""thread worker function"""
print 'Worker'
t = worker()
t.start()
㈤ python並發編程-進程池
在利用Python進行系統管理的時候,特別是同時操作多個文件目錄,或者遠程式控制制多台主機,並行操作可以節約大量的時間。多進程是實現並發的手段之一,需要注意的問題是:
例如當被操作對象數目不大時,可以直接利用multiprocessing中的Process動態成生多個進程,十幾個還好,但如果是上百個,上千個。。。手動的去限制進程數量卻又太過繁瑣,此時可以發揮進程池的功效。
我們就可以通過維護一個進程池來控制進程數目,比如httpd的進程模式,規定最小進程數和最大進程數..
ps: 對於遠程過程調用的高級應用程序而言,應該使用進程池,Pool可以提供指定數量的進程,供用戶調用,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會創建一個新的進程用來執行該請求;但如果池中的進程數已經達到規定最大值,那麼該請求就會等待,直到池中有進程結束,就重用進程池中的進程。
創建進程池的類:如果指定numprocess為3,則進程池會從無到有創建三個進程,然後自始至終使用這三個進程去執行所有任務,不會開啟其他進程
參數介紹:
方法介紹:
主要方法:
其他方法(了解部分)
應用:
發現:並發開啟多個客戶端,服務端同一時間只有3個不同的pid,幹掉一個客戶端,另外一個客戶端才會進來,被3個進程之一處理
回調函數:
需要回調函數的場景:進程池中任何一個任務一旦處理完了,就立即告知主進程:我好了額,你可以處理我的結果了。主進程則調用一個函數去處理該結果,該函數即回調函數
我們可以把耗時間(阻塞)的任務放到進程池中,然後指定回調函數(主進程負責執行),這樣主進程在執行回調函數時就省去了I/O的過程,直接拿到的是任務的結果。
如果在主進程中等待進程池中所有任務都執行完畢後,再統一處理結果,則無需回調函數