當提起這兩個詞的時候,是不是很多人都認爲高併發=多線程?
當面試官問到高併發系統可以採用哪些手段來解決,是不是一臉懵逼?
確實,在一開始接觸的時候,不少人都會將二者混淆,誤以爲所謂的高併發的系統就是能同時供海量用戶訪問,而採用多線程手段不就是可以提供系統的併發能力嗎?
實際上,他們兩個總是相伴而生,但側重點又有不同。
什麼是高併發?
相對於分佈式來講,高併發在解決的問題上會集中一些,其反應的是同時有多少量:比如在線直播服務,同時有上萬人觀看。
高併發可以通過分佈式技術去解決,將併發流量分到不同的物理服務器上。
但除此之外,還可以有很多其他優化手段:比如使用緩存系統,將所有的,靜態內容放到CDN等;還可以使用多線程技術將一臺服務器的服務能力最大化。
什麼是多線程?
多線程是指從軟件或者硬件上實現多個線程併發執行的技術,它更多的是解決CPU調度多個進程的問題,從而讓這些進程看上去是同時執行(實際是交替運行的)。
這幾個概念中,多線程解決的問題是最明確的,手段也是比較單一的,基本上遇到的最大問題就是線程安全。
在JAVA語言中,需要對JVM內存模型、指令重排等深入瞭解,才能寫出一份高質量的多線程代碼。
高併發系統,多線程涉及到大量的概念和知識點,如果沒有系統的學習,很容易會雜糅概念而辨識不清,在面試與實際工作中都會遇到困難。這些知識點,可以按照以下的多線程高併發的文檔以及知識體系導圖系統性的學習。
整份文檔共九個章節
第一節:線程的基本概念
多線程與高併發大概講六大塊,
- 第一:基本的概念,從什麼是線程開始
- 第二:JUC同步工具,就是各種同步鎖態
- 第三:同步容器
- 第四:線程池
- 第五:高頻面試加分項的- -些面試用的東西,包括線程
- 第六: Disruptor ,不知道有多少同學聽說過這個框架的,這個框架它也是一個MQ框架( Message Queue )叫做消息隊列,消息隊列非常多,後面還會給大家講Kafka、RabbitMQ ,Redis等這些都是消息隊列。Disruptor是目前大家公認的在單機環境上效率最高的、性能最快的MQ.
第二節: volatile與CAS
- volatile
- CAS
第三節: Atomic類和線程同步新機制
一個Atomic的問題 ,然後開始講除synchronized之外的別的鎖。
第四節: LockSupport. 淘寶面試題與源碼閱讀方法論
本章我們補一個小漏洞,它叫LockSupport ,然後我們分析兩道面試題,緊接着我會教大家閱讀源碼的技巧,源碼層出不窮,生生不息,掌握了源碼的閱讀技巧,大家培養出了閱讀源碼興趣的時候,之後好多代碼,你需要自己去摳,摳出來纔是你自己的,最後我們會分析AQS源碼
第五節: AQS源碼閱讀與強軟弱虛4種引用以及ThreadLocal原理與源碼
今天咱們繼續講AQS的源碼,在上節課我教大家怎麼閱讀AQS源碼,跑不起來的不讀、解決問題就好。目的性一條線索到底、無關細節略過,讀源碼的時候應該先讀骨架,比如拿AQS來說,你需要了解AQS是這麼一個數據結構,你讀源碼的時候讀起來就會好很多
第六節:併發容器
第七節:線程池
這道面試題呢實際上是華爲的一道面試題,其實它裏面是一道填空題,後來就很多的開始考這道題,這個面試題是兩個線程。第一個線程是從1到26, 第二個線程是從A到一直到Z ,然後要讓這兩個線程做到同時運行,交替輸出。順序打印。那麼這道題目的解法有非常多。
第八節:線程池與源碼閱讀
- 線程池worker任務單元
- 核心線程執行邏輯-runworker
第九節: JMH與Disruptor
- JMH Java準測試工具套件
- 什麼是JMH
- 創建JMH測試
由於篇幅限制,且不影響大家閱讀體驗,小編在這裏只能給大家展示目錄及部分內容,完整文檔已備好。
本文到這裏就結束了,希望大家都能有個好的閱讀體驗。