高併發的一點兒心得

現在,很多公司在面試的時候都會提到需熟悉併發這塊,那今天我就來說說關於併發這塊我的認識與理解!

今天主要從三個方面來說一下併發:1.併發到底是什麼?2.併發是怎麼產生的呢?3.如何防止併發?

首先,第一個,併發的概念。在百科上是這樣說的:在操作系統中,是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機上運行。這個其實我都沒咋理解,我自己的理解就是,很多不同請求在同一時間請求相同的資源的這個過程就是併發。

那麼,併發是怎麼產生的呢?這個從我前面說的概念中就可以看出,就是在同一時刻請求同一個資源造成的。比如說,我現在有一個蘋果放在一個黑盒子中,然後同時有5個人在同一時刻都說“我想要這個蘋果”,那這個蘋果現在到底要給誰呢?這樣併發的問題就產生了。或許你會說,那我只給其中一個人給,然後告訴其他4個人,蘋果沒有了。或者說我把這個蘋果分成5分,沒人給一份就好了。但是,機器畢竟是機器啊,他沒有人類的思維啊,如是機器有思維了,那要人幹啥啊,對吧。機器他只會按照你實現設定好的程序去執行。現在你想要機器去做這些操作,那你就需要提前在程序中寫好關於怎麼去分蘋果的邏輯,是吧,這樣,就到了如何解決/防止併發的問題。

如何去解決併發呢?總的來說,目前有三種比較主流的解決方案。1.服務器層面2.數據庫層面3.程序設計方面

1.服務器方面:這塊目前主要是通過負載均衡去實現,將多個請求分發到不同的服務器去,減少服務器的壓力。但是畢竟是硬件方面的解決方案,但是放到後面再考慮。

2.數據庫方面:目前我所知道的項目,大多是在數據庫方面去解決高併發這塊的。使用數據庫的鎖機制,分庫分表,讀寫分離,使用redis等nosql方式。這快現在也是我們做PHP必須要知道的一部分內容了,還不熟悉的小夥伴這塊一定要去再看看。

3.數據設計層面:使用事務+鎖,將異步操作轉換成同步操作,使用緩存減少壓力。

今天就先說這些,後面我將具體的技術整理一下,再分享出來,大家一起探討一下!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章