日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高并发的理解和使用场景-----特意区别和多线程的关系

發(fā)布時間:2023/12/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高并发的理解和使用场景-----特意区别和多线程的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一,高并發(fā)的理解

? ?1.概念:就是短時間內(nèi)遇到大量操作請求,導(dǎo)致站點服務(wù)器/db服務(wù)器資源被占滿甚至嚴重時直接導(dǎo)致宕

? ?2.影響:沒有做高并發(fā)預(yù)處理的系統(tǒng)會給用戶很差的體驗感;

? ?3.系統(tǒng)好壞的衡量:衡量一個系統(tǒng)的好壞,除了業(yè)務(wù)外,還有就是系統(tǒng)的吞吐量(單位時間內(nèi)處理的請求數(shù))-----QPS(每秒鐘能處理的請求數(shù))和響應(yīng)時間

二,區(qū)分一下高并發(fā)和多線程的關(guān)系----曾經(jīng)我也是單純的理解高并發(fā)就是多線程,錯的很離譜

? ? 1.多線程的理解:

?多線程是java的特性,因為現(xiàn)在cpu都是多核多線程的,可以同時執(zhí)行幾個任務(wù),為了提高jvm的執(zhí)行效率,java提供了這種多線程的機制,以增強數(shù)據(jù)處理效率。

?多線程對應(yīng)的是cpu,高并發(fā)對應(yīng)的是訪問請求,可以用單線程處理所有訪問請求,也可以用多線程同時處理訪問請求。

在過去單CPU時代,單任務(wù)在一個時間點只能執(zhí)行單一程序。之后發(fā)展到多任務(wù)階段,計算機能在同一時間點并行執(zhí)行多任務(wù)或多進程。雖然并不是真正意義上的“同一時間點”,而是多個任務(wù)或進程共享一個CPU,并交由操作系統(tǒng)來完成多任務(wù)間對CPU的運行切換,以使得每個任務(wù)都有機會獲得一定的時間片運行。

再后來發(fā)展到多線程技術(shù),使得在一個程序內(nèi)部能擁有多個線程并行執(zhí)行。一個線程的執(zhí)行可以被認為是一個CPU在執(zhí)行該程序。當(dāng)一個程序運行在多線程下,就好像有多個CPU在同時執(zhí)行該程序

? ?2.多線程和高并發(fā)的關(guān)系

? ? 要想系統(tǒng)能夠適應(yīng)高并發(fā)狀態(tài),則需要從各個方面進行系統(tǒng)優(yōu)化,包括,硬件、網(wǎng)絡(luò)、系統(tǒng)架構(gòu)、開發(fā)語言的選取、數(shù)據(jù)結(jié)構(gòu)的運用、算法優(yōu)化、數(shù)據(jù)庫優(yōu)化等…而多線程只是其中解決方法之一

? ?3.并發(fā)編程的幾個要素

  • ?原子性原子,即一個不可再被分割的顆粒。在Java中原子性指的是一個或多個操作要么全部執(zhí)行成功要么全部執(zhí)行失敗。
  • ?有序性程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。(處理器可能會對指令進行重排序)
  • ?可見性當(dāng)多個線程訪問同一個變量時,如果其中一個線程對其作了修改,其他線程能立即獲取到最新的值

? ?4.使用多線程技術(shù)編程需要注意的幾個點

? ? ? ?4.1 清楚一個線程的五個狀態(tài)

? ? ? ?4.2 理解悲觀鎖和樂觀鎖?

? ? ? ?4.3懂線程之間的協(xié)作(wait/sleep/notify等)

? ? ? ?4.4 知道什么時候使用線程池

? ?5.高并發(fā)的場景

? ? ? 一般像火車票搶票,秒殺 系統(tǒng),雙11或者京東618活動等這種太明顯不過了,這種還是正常的業(yè)務(wù)范圍,蠻好理解的,還有一種就是惡意的攻擊,導(dǎo)致系統(tǒng)的某個功能近乎癱瘓,比如驗證碼的請求等,

? ? ? 假設(shè)系統(tǒng)的一些架構(gòu)方便的并發(fā)措施都做到位了,例如,重要系統(tǒng)配備了好的資源(高質(zhì)量服務(wù)器),同時使用集群方式提供服務(wù),增加了redis集群配置等,最后需要處理的就是底層數(shù)據(jù)庫那塊了,

? ? ?不然前面那么多請求都吃下來了,到了底層掉鏈子跟不上那也不行:

? ? ?在此,個人理解為并發(fā)無非就是并發(fā)讀和并發(fā)寫,并發(fā)讀還好,一般使用緩存就可以搞定,并發(fā)寫技術(shù)就比較多了;

? ? ?一般我們都知道 并發(fā)時最怕的就是對共享變量的同時訪問導(dǎo)致臟數(shù)據(jù)的產(chǎn)生,所以一般會加鎖:對象鎖(例如:syncrinized等關(guān)鍵字)和 分布式鎖(數(shù)據(jù)庫鎖,redis,zookeeper)

? ? 對象鎖顧名思義就是鎖住當(dāng)前對象--只能用在單服務(wù)器上,對于分布式系統(tǒng)或者單系統(tǒng)分布式部署時對共享資源的訪問就必須使用分布式鎖了,此時對象鎖沒法用了?

? ? 像秒殺系統(tǒng)可以使用緩存讓還有數(shù)量時都可以看到,而在開搶后得看個人運氣了(網(wǎng)絡(luò)等原因),此時使用樂觀鎖(共享鎖)就搞定了嘛

? ? 像銀行的消費后更新銀行卡余額,使用悲觀鎖(排斥鎖)就可以

? ? 具體想搞清楚分布式鎖的請看下面這個鏈接:https://www.cnblogs.com/toutou/archive/2018/09/24/9554974.html

? ? ?

? ?6.高并發(fā)的技術(shù)解決方案

? ? ??

? ??

? ? ?a.分布式緩存:redis、memcached等,

? ? ?b.系統(tǒng)采用水平方向擴展,盡量使用集群來分散處理多請求。

? ? ?c.應(yīng)用拆分:一個工程被拆分為多個工程部署,利用dubbo解決多工程之間的通信。

? ? ?d.數(shù)據(jù)庫分庫分表等。

? ? ?e .數(shù)據(jù)庫讀寫分離,解決大數(shù)據(jù)的查詢問題。

? ? ?f.還可以利用nosql ,例如mongoDB配合mysql組合使用。

? ? g.還需要建立大數(shù)據(jù)訪問情況下的服務(wù)降級以及限流機制等。

? ? h.消息隊列中間件:activeMQ等,解決大量消息的異步處理能力。

? ? .............

? ??

? ??

?

轉(zhuǎn)載于:https://www.cnblogs.com/feichen-66/p/11207847.html

總結(jié)

以上是生活随笔為你收集整理的高并发的理解和使用场景-----特意区别和多线程的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。