併發 多線程 區別

 「高併發和多線程」老是被一塊兒提起,給人感受二者好像相等,實則 高併發 ≠ 多線程html

  多線程是完成任務的一種方法,高併發是系統運行的一種狀態,經過多線程有助於系統承受高併發狀態的實現。web

   高併發是一種系統運行過程當中遇到的一種「短期內遇到大量操做請求」的狀況,主要發生在web系統集中大量訪問或者socket端口集中性收到大量請求(例如:12306的搶票狀況;天貓雙十一活動)。該狀況的發生會致使系統在這段時間內執行大量操做,例如對資源的請求,數據庫的操做等。若是高併發處理很差,不單單下降了用戶的體驗度(請求響應時間過長),同時可能致使系統宕機,嚴重的甚至致使OOM異常,系統中止工做等。若是要想系統可以適應高併發狀態,則須要從各個方面進行系統優化,包括,硬件、網絡、系統架構、開發語言的選取、數據結構的運用、算法優化、數據庫優化……而多線程只是其中解決方法之一算法

   實現高併發須要考慮:
                系統的架構設計,如何在架構層面減小沒必要要的處理(網絡請求,數據庫操做等)
                網絡拓撲優化減小網絡請求時間、如何設計拓撲結構,分佈式如何實現?
                系統代碼級別的代碼優化,使用什麼設計模式來進行工做?哪些類須要使用單例,哪些須要儘可能減小new操做?
                提升代碼層面的運行效率、如何選取合適的數據結構進行數據存取?如何設計合適的算法?
                任務執行方式級別的同異步操做,在哪裏使用同步,哪裏使用異步?
                JVM調優,是以server模式仍是以clien模式運行,如何設置Heap、Stack、Eden的大小,如何選擇GC策略,控制Full GC的頻率?
                數據庫優化減小查詢修改時間。數據庫的選取?數據庫引擎的選取?數據庫表結構的設計?數據庫索引、觸發器等設計?是否使用讀寫分離?仍是須要考慮使用數據倉庫?
                緩存數據庫的使用,如何選擇緩存數據庫?是Redis仍是Memcache? 如何設計緩存機制?
                數據通訊問題,如何選擇通訊方式?是使用TCP仍是UDP,是使用長鏈接仍是短鏈接?NIO仍是BIO?netty、mina仍是原生socket?
                操做系統選取,是使用winserver仍是Linux?或者Unix?
                硬件配置?是8G內存仍是32G,網卡10G仍是1G?
                ……
                ……
數據庫

以上的這些問題在高併發中都是必需要深刻考慮的,就像木桶原理同樣,只要其中的某一方面沒有考慮到,都會形成系統瓶頸,影響整個系統的運行。而高併發問題不單單涉及面之廣,同時又要求有足夠的深度!!!設計模式

   而多線程在這裏只是在同/異步角度上解決高併發問題的其中的一個方法手段,是在同一時刻利用計算機閒置資源的一種方式。緩存

多線程在解決高併發問題中所起到的做用就是使計算機的資源在每一時刻都能達到最大的利用率,不至於浪費計算機資源使其閒置。

網絡

==========================================數據結構

原文連接:多線程(一)高併發和多線程的關係轉載請註明出處!多線程

https://www.cnblogs.com/PerkinsZhu/p/7242247.html
架構

==========================================

相關文章
相關標籤/搜索