Python高并發(fā)和多線程有什么關(guān)系
“高并發(fā)和多線程”總是被一起提起,給人感覺(jué)兩者好像相等,實(shí)則 高并發(fā) ≠ 多線程
多線程是完成任務(wù)的一種方法,高并發(fā)是系統(tǒng)運(yùn)行的一種狀態(tài),通過(guò)多線程有助于系統(tǒng)承受高并發(fā)狀態(tài)的實(shí)現(xiàn)。
高并發(fā)是一種系統(tǒng)運(yùn)行過(guò)程中遇到的一種“短時(shí)間內(nèi)遇到大量操作請(qǐng)求”的情況,主要發(fā)生在web系統(tǒng)集中大量訪問(wèn)或者socket端口集中性收到大量請(qǐng)求(例如:12306的搶票情況;天貓雙十一活動(dòng))。
該情況的發(fā)生會(huì)導(dǎo)致系統(tǒng)在這段時(shí)間內(nèi)執(zhí)行大量操作,例如對(duì)資源的請(qǐng)求,數(shù)據(jù)庫(kù)的操作等。如果高并發(fā)處理不好,不僅僅降低了用戶的體驗(yàn)度(請(qǐng)求響應(yīng)時(shí)間過(guò)長(zhǎng)),同時(shí)可能導(dǎo)致系統(tǒng)宕機(jī),嚴(yán)重的甚至導(dǎo)致OOM異常,系統(tǒng)停止工作等。如果要想系統(tǒng)能夠適應(yīng)高并發(fā)狀態(tài),則需要從各個(gè)方面進(jìn)行系統(tǒng)優(yōu)化,包括,硬件、網(wǎng)絡(luò)、系統(tǒng)架構(gòu)、開(kāi)發(fā)語(yǔ)言的選取、數(shù)據(jù)結(jié)構(gòu)的運(yùn)用、算法優(yōu)化、數(shù)據(jù)庫(kù)優(yōu)化……而多線程只是其中解決方法之一。
實(shí)現(xiàn)高并發(fā)需要考慮:
系統(tǒng)的架構(gòu)設(shè)計(jì),如何在架構(gòu)層面減少不必要的處理(網(wǎng)絡(luò)請(qǐng)求,數(shù)據(jù)庫(kù)操作等) 網(wǎng)絡(luò)拓?fù)鋬?yōu)化減少網(wǎng)絡(luò)請(qǐng)求時(shí)間、如何設(shè)計(jì)拓?fù)浣Y(jié)構(gòu),分布式如何實(shí)現(xiàn)? 系統(tǒng)代碼級(jí)別的代碼優(yōu)化,使用什么設(shè)計(jì)模式來(lái)進(jìn)行工作?哪些類需要使用單例,哪些需要盡量減少new操作? 提高代碼層面的運(yùn)行效率、如何選取合適的數(shù)據(jù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)存取?如何設(shè)計(jì)合適的算法? 任務(wù)執(zhí)行方式級(jí)別的同異步操作,在哪里使用同步,哪里使用異步? JVM調(diào)優(yōu),是以server模式還是以clien模式運(yùn)行,如何設(shè)置Heap、Stack、Eden的大小,如何選擇GC策略,控制Full GC的頻率? 數(shù)據(jù)庫(kù)優(yōu)化減少查詢修改時(shí)間。數(shù)據(jù)庫(kù)的選取?數(shù)據(jù)庫(kù)引擎的選取?數(shù)據(jù)庫(kù)表結(jié)構(gòu)的設(shè)計(jì)?數(shù)據(jù)庫(kù)索引、觸發(fā)器等設(shè)計(jì)?是否使用讀寫(xiě)分離?還是需要考慮使用數(shù)據(jù)倉(cāng)庫(kù)? 緩存數(shù)據(jù)庫(kù)的使用,如何選擇緩存數(shù)據(jù)庫(kù)?是Redis還是Memcache? 如何設(shè)計(jì)緩存機(jī)制? 數(shù)據(jù)通信問(wèn)題,如何選擇通信方式?是使用TCP還是UDP,是使用長(zhǎng)連接還是短連接?NIO還是BIO?netty、mina還是原生socket? 操作系統(tǒng)選取,是使用winserver還是Linux?或者Unix? 硬件配置?是8G內(nèi)存還是32G,網(wǎng)卡10G還是1G?以上的這些問(wèn)題在高并發(fā)中都是必須要深入考慮的,就像木桶原理一樣,只要其中的某一方面沒(méi)有考慮到,都會(huì)造成系統(tǒng)瓶頸,影響整個(gè)系統(tǒng)的運(yùn)行。而高并發(fā)問(wèn)題不僅僅涉及面之廣,同時(shí)又要求有足夠的深度!!!
而多線程在這里只是在同/異步角度上解決高并發(fā)問(wèn)題的其中的一個(gè)方法手段,是在同一時(shí)刻利用計(jì)算機(jī)閑置資源的一種方式。
多線程在解決高并發(fā)問(wèn)題中所起到的作用就是使計(jì)算機(jī)的資源在每一時(shí)刻都能達(dá)到最大的利用率,不至于浪費(fèi)計(jì)算機(jī)資源使其閑置。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. java實(shí)現(xiàn)圖形化界面計(jì)算器2. Spring-Richclient 0.1.0 發(fā)布3. 解決idea中yml文件不識(shí)別的問(wèn)題4. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟5. Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考6. IDEA的Mybatis Generator駝峰配置問(wèn)題7. javascript設(shè)計(jì)模式 ? 建造者模式原理與應(yīng)用實(shí)例分析8. IIS Express 取代 ASP.NET Development Server的配置方法9. IntelliJ Idea2017如何修改緩存文件的路徑10. 一篇文章帶你了解JavaScript-對(duì)象
