python并发编程调优_Python并发编程-并发解决方案概述
Python并發(fā)編程-并發(fā)解決方案概述
作者:尹正杰
版權(quán)聲明:原創(chuàng)作品,謝絕轉(zhuǎn)載!否則將追究法律責任。
一.并發(fā)和并行區(qū)別
1>.并行(parallel)
同時做某些事,可以互不干擾的同一個時刻做幾件事。
2>.并發(fā)(concurrency)
也是同時做某些事,但是強調(diào),一個時間段內(nèi)有多少事情要處理。
3>.舉例
高速公路的車道,雙向4車道,所有車輛(數(shù)據(jù))可以互不干擾的在自己的車道上行駛(傳輸)。
在同一時刻,每條車道上可能同時又車輛在跑,是同時發(fā)生的概念,這是并行。
在一段時間內(nèi),又這么多車要通過,這是并發(fā)。
二.并發(fā)的常見解決方案
"食堂打飯模型":
中午12點,開飯啦,大家都涌向食堂,這就是并發(fā)。如果人很多,就是高并發(fā)。
1>.隊列,緩沖區(qū)
假設(shè)只有一個狀況,陸續(xù)涌入食堂的人,排隊大財是比較好的方式。
所以,排隊(隊列)是一種天然解決并發(fā)的辦法。
排隊就是把人排成隊列,先進先出,解決了資源使用的問題。
排成的隊列,其實就是一個緩沖地帶,就是緩沖區(qū)。
假設(shè)女生優(yōu)先,每次都從這個隊伍中優(yōu)先選出女生來打飯,這就是優(yōu)先隊列。
例如Queue模塊的類Queue,LifoQueue,PriorityQueue(小頂堆實現(xiàn))。
2>.爭搶
只開一個這狀況,有可能沒有秩序,也就是誰擠進去就給誰打飯。
擠到窗口的人占據(jù)窗口,直到打到飯菜離開。
其他人繼續(xù)爭搶,會有一個人占據(jù)著窗口,可以視為鎖定窗口,窗口就不能為其他人提供服務(wù)了。這就是一種鎖機制。
誰搶到資源就上鎖,排他性的獨占鎖,其他人只能等候。
爭搶也是一種高并發(fā)解決方案,但是,這樣可能不好,因為有可能有人很長時間搶不到。
3>.預(yù)處理
其實排隊不是問題,就算2萬人拍成一隊等吃飯,如果能10分鐘搞定也行。問題就是并處并發(fā)的速度太慢了。
經(jīng)過分析發(fā)現(xiàn),本食堂主要是打菜等候時間太長,因為每個人都是現(xiàn)場點菜現(xiàn)做。
食堂可以提前統(tǒng)計大多數(shù)人最愛吃的菜品,將最愛吃的80%的熱門菜,提前做好,保證供應(yīng),20%的冷門菜,現(xiàn)做。
這樣大多數(shù)人,就算不排隊采用爭搶的方式鎖定窗口,也很快達到飯菜走了,快速釋放窗口。
這是以中國提前加載用戶需要的數(shù)據(jù)的思路,預(yù)處理思想,緩存常用。
4>.并行
成百上千人同時來吃飯,一個隊伍搞不定的,多開打飯窗口形成多個隊列,如同開多個車道一樣,并行打菜。
開窗口就得擴大食堂,得多古人再窗口提供服務(wù),造成成本上升。高速公路的多車道是并行方案,多車道提高了通信效率,但是也意味著建造維護成本也高了。
日常可以通過購買更多服務(wù)器,或多開進程,線程實現(xiàn)并行處理,來解決并發(fā)問題。
注意這些都是水平擴展的思想。并行是解決并發(fā)手段之一。
溫馨提示:
如果線程在單CPU上處理,就不是真并行了。
但是,現(xiàn)在多數(shù)服務(wù)器都是多CPU的,至少也是單顆多核CPU,服務(wù)的部署往往是多機的,分布式的,這都是并行處理。
5>.提速
提高單個窗口的打飯速度,也是解決并發(fā)的方式。
打飯人員提高工作技能,或為單個窗口配更多的服務(wù)人員,都是提速的辦法。
提高單個CPU性能,或單個服務(wù)器安裝更多CPU。
這是一種垂直擴展思想。
6>.消息中間件
在北京的上地,西二旗地鐵站外九曲回腸的走廊,緩沖人流,進去之后再多口安檢進站。
常見的消息中間件又RabbitMQ,ActiveMQ(Apache),RocketMQ(阿里),kafka(Apache)等。
當然海域哦其它手段解決并發(fā)問題,但是已經(jīng)例舉出了常用的解決方案,一般來說不同的場景用不同的策略,而策略可能是多種方式的優(yōu)化組合。
例如開食堂(多地),也可以把食堂建設(shè)到宿舍生活區(qū)(就近原則),所以說,技術(shù)來源于生活。
總結(jié)
以上是生活随笔為你收集整理的python并发编程调优_Python并发编程-并发解决方案概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: usb 进入suspend_USB的挂起
- 下一篇: gitblit如何迁移入gitlab合并