回覆列表
-
1 # 此生唯一
-
2 # 程式碼飼養員天齊
實際題主主要考慮的是併發程式設計的問題,實際的業務開發中,會或多或少的接觸一些這樣的併發程式設計的場景。本人也從事軟體開發多年,有一定的併發程式設計經驗,正好藉此機會將自己的遇到的一些場景總結一下:
首先,併發程式設計可以說是Java高階研發人員需要掌握的一項技能,併發程式設計是一項非常複雜的程式設計能力。
場景一:B/S或C/S模式下。一個服務端對應著數量眾多的使用者,此種場景下適合使用併發程式設計。將每個使用者的操作可以看做是一個獨立的任務,多個使用者可以看做是多個獨立的任務,這樣的場景就是個併發程式設計。此種場景下適合在服務端建立執行緒池執行使用者的任務。
場景二:單執行緒的執行能力已經到達瓶頸,只有做併發程式設計,才可以讓程式的執行速度得到質的提高。此種情況下,適合加入併發程式設計,透過併發程式設計大大提高程式的執行速度。
場景三:模擬模擬。在做測試的時候,模擬單一使用者無法達到要求,需要做藉助併發程式設計模擬多使用者時,可以使用併發程式設計。
場景四:非同步處理。比如說,服務端在接收客戶端的訊息進行處理時,此時處理非常複雜,耗費時間長,可以藉助併發程式設計,啟動新的執行緒進行後續的耗時業務處理,更快的響應使用者,讓使用者得到更好的體驗。
當然,想處理好併發程式設計也並給一日之功,需要不斷的實踐總結。
本人具有多年的java開發經驗,熟悉多種框架,熟悉網路程式設計,熟悉java安全程式設計,熟悉大資料,熟悉多種安全協議,熟悉併發程式設計,有興趣的同學可以互相關注,互相學習!!!
首先了解下什麼是多執行緒吧!多執行緒就是“人海戰術”,伴隨著摩爾定律的失效(單核心的計算能力不能再成倍的增長,而改為橫向擴充套件),CPU變為了多核心的模式,而每一個CPU在同一時間能處理一個執行緒,也就是說同一時間執行緒的執行數可以為CPU核心數(超執行緒不討論)!效率為以前單核心的N倍!
JAVA這門程式語言,可謂是讓多執行緒技術變得老生常談,那麼多執行緒使用在什麼地方呢?
1,web伺服器:web伺服器的請求數往往是非常大的,而且自從有了HTTP1.1之後,TCP預設是長連線模式,一般像tomcat這樣的伺服器會開多個執行緒保持與客戶端的連線,所以需要多執行緒!
2,非同步呼叫:比如電商平臺,在主執行緒處理完訂單等主業務之後,需要發簡訊,郵件等非主要的業務程式碼,這個時候可以新起一個執行緒,非同步呼叫,而主執行緒可以直接返回,避免長時間的等待!
3,上傳下載大檔案處理:比如迅雷,如果是單執行緒,那麼同一時候,它就只能寫一個下載任務的資料,但是多執行緒就可以同時進行更多工!
4,分散式計算:比如1+2+...+100000,你可以分為十個任務,然後彙總即可,比單執行緒可以省大約9/10的時間!
還有更多場景可以適用於多執行緒環境,具體問題具體分析!
但是多執行緒其實絕對是魔鬼,從jdk中的併發包就可見端倪,不管是synchronize,lock,threadlocal,執行緒池,countbatchdown,forkjoin,future,callable,valatile哪一個多執行緒的關鍵字,都可以讓我們JAVA程式設計人員生不如死!
只能說不到萬不得已,不要盲目的使用多執行緒,比如redis就能靠著單執行緒一枝獨秀,linux之父Linus Tonvard說過:忘掉那該死的併發吧!可見這個多執行緒多麼的不可取,只是如果我們JAVA程式設計師如果不會多執行緒,應該就失業了吧!
反正不管多執行緒有多痛苦,以後我還是會發多執行緒的技術分享的,敬請關注!