高并發的理解和使用場景-----特意區別和多線程的關系

一,高并發的理解

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

? ?2.影響:沒有做高并發預處理的系統會給用戶很差的體驗感;

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

二,區分一下高并發和多線程的關系----曾經我也是單純的理解高并發就是多線程,錯的很離譜

? ? 1.多線程的理解:

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

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

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

再后來發展到多線程技術,使得在一個程序內部能擁有多個線程并行執行。一個線程的執行可以被認為是一個CPU在執行該程序。當一個程序運行在多線程下,就好像有多個CPU在同時執行該程序

? ?2.多線程和高并發的關系

? ? 要想系統能夠適應高并發狀態,則需要從各個方面進行系統優化,包括,硬件、網絡、系統架構、開發語言的選取、數據結構的運用、算法優化、數據庫優化等…而多線程只是其中解決方法之一

? ?3.并發編程的幾個要素

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

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

? ? ? ?4.1 清楚一個線程的五個狀態

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

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

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

? ?5.高并發的場景

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

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

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

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

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

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

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

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

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

? ? ?

? ?6.高并發的技術解決方案

? ? ??

? ??

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

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

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

? ? ?d.數據庫分庫分表等。

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

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

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

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

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

? ??

? ??

?

轉載于:https://www.cnblogs.com/feichen-66/p/11207847.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248445.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

async 和 await 原來這么簡單

前言 前端同學們可能都知道 async 和 await 的使用,當被面試官問到 async 和 await 的是什么?或者說一說你對 async、await 的理解?如果我們還是僅僅去闡述我是如何使用的就顯得格外的蒼白無力。今天博主就來帶大家進一步認識我們的 async 和…

研一寒假02-指針_new分配內存_使用new來創建動態數組_使用動態數組_使用delete來釋放new分配的內存...

#---------------------------------指針-----------------------------------# #include <iostream> int main(){ using namespace std; /* 指針引入 */ int updates 6; //聲明一個變量 int* p_updates; //聲明一個指針p_updates,該指針指向一個地址 p_updates&upd…

利用Windows內置工具winsat測試硬盤速度(SSD機械盤對比)

利用Windows內置工具winsat測試硬盤速度&#xff08;SSD&機械盤對比&#xff09; 以下是紅色內容是在命令行運行&#xff1a; C:\Users\Administrator>winsat diskWindows 系統評估工具> 正在運行: 功能枚舉 > 運行時間 00:00:00.00> 正在運行: 存儲評估 -seq …

我為何在 CSDN 樂在其中

文章目錄寫在前面成為博主究竟能得到什么&#xff1f;內在提升耀眼名片豐富眼界提升知名度博客》變現寫在最后寫在前面 各位伙伴大家好&#xff0c;我是幾何心涼&#xff0c;一位不是很大的也不是很小的博主&#xff0c;今天想要跟大家去聊一些比較實在的內容&#xff1b;大家能…

EFLinq查詢

1、無參數查詢var model db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList(); 2、有參查詢var model db.Database.SqlQuery<UserInfo>("select* from UserInfoes where idID ",new SqlParameter("ID",id)).ToL…

實現div可以調整高度(div實現resize)

實現div可以調整高度&#xff08;div實現resize&#xff09; 一、div 實現resize&#xff08;類似textarea&#xff09; 代碼如下&#xff1a; <!DOCTYPE html> <html><head><title>div實現textarea效果</title><style>#textarea {height:…

10分鐘設置免費遠程桌面

文章目錄前言遠程桌面設置教程啟動Amazon Lightsail實例配置遠程桌面啟動遠程桌面使用遠程桌面前言 “你見過洛杉磯凌晨4點的樣子嗎&#xff1f;” 沒有也沒關系&#xff0c;你可以輕松配置一臺位于洛杉磯的免費遠程桌面。 利用Amazon全球可用區&#xff0c;甚至可以在世界各…

樹莓派-開啟spi

1. sudo raspi-config #進入樹莓派配置頁 2. #進入每5項&#xff0c;進入啟用spi即可 轉載于:https://www.cnblogs.com/lobin/p/10459076.html

Lucene全文檢索過程

1. 索引過程&#xff1a; 1) 有一系列被索引文件 2) 被索引文件經過語法分析和語言處理形成一系列詞(Term)。 3) 經過索引創建形成詞典和反向索引表。 4) 通過索引存儲將索引寫入硬盤。 2. 搜索過程&#xff1a; 1) 用戶輸入查詢語句。 2) 對查詢語句經過語法分析和語言分析得到…

tcpdump 用法

原文鏈接 本文原文來自&#xff1a; A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic TCPDUMP 簡介 TCPDUMP 在一個界面中既提供了強大的功能又簡單易用&#xff0c;無疑已經是網絡分析工具中的老大。 本教程將介紹如何以各種方式隔離流量&#xff1a;從IP&am…

網絡端

1.synchronized 同步鎖 同步方法: 成員|靜態 簡單,但是鎖的范圍一般可能較大,效率低 同步塊 類的class:相當于鎖了類的整個信息|所有對象 this:鎖當前對象,鎖了這個對象的所有資源 資源:一般鎖不變的內容--對象地址 鎖的范圍太大效率低,鎖的范圍太小可能鎖不住 鎖一定要鎖不變的…

BZOJ2690: 字符串游戲(平衡樹動態維護Dfs序)

Description 給定N個僅有a~z組成的字符串ai,每個字符串都有一個權值vi,有M次操作&#xff0c;操作分三種&#xff1a;Cv x v:把第x個字符串的權值修改為vCs x a:把第x個字符串修改成aQ:求出當前的最大權字符串集合&#xff0c;使得這個集合中的字符串經過重新排列后滿足除最后一…

【第一趴】初探uni-app(uni-app發行者、uni-app推出背景、為什么選擇uni-app)

文章目錄寫在前面DCloud當下跨平臺開發存在的問題為什么選擇uni-app寫在最后寫在前面 聚沙成塔——每天進步一點點&#xff0c;大家好我是幾何心涼&#xff0c;不難發現越來越多的前端招聘JD中都加入了uni-app 這一項&#xff0c;它也已經成為前端開發者不可或缺的一項技能了&…

Rocket - tilelink - Atomics

https://mp.weixin.qq.com/s/TSwKL_qm-b-0e8x7r--hhg 簡單介紹Atomics中數學運算、邏輯運算的實現。??1. ioAtomics是一個硬件模塊&#xff0c;他繼承自Modules&#xff1a;??IO端口定義如下&#xff1a;??其中&#xff1a;a. write: 是否寫操作&#xff1b;b. a&#xf…

Spark streaming java代碼

待做轉載于:https://www.cnblogs.com/drjava/p/10464388.html

【第二趴】uni-app開發工具(手把手帶你安裝HBuilderX、搭建第一個多端項目初體驗)

文章目錄 寫在前面HBuilderXHBuilderX 優勢HBuilderX 安裝uni-app 初體驗寫在最后寫在前面 聚沙成塔——每天進步一點點,大家好我是幾何心涼,不難發現越來越多的前端招聘JD中都加入了uni-app 這一項,它也已經成為前端開發者不可或缺的一項技能了,所以涼哥為大家推出 聚沙成…

“勤學會”火爆來襲

文章目錄勤學會是什么&#xff1f;勤學會存在的意義是什么強大的助學團勤學會如何幫助大家學習參與勤學會能得什么獎品專屬C計劃加入勤學會勤學會是什么&#xff1f; 他來了他來了&#xff0c;其實兩個月前勤學會的概念產品就已經出現了&#xff0c;只不過因為了 1024 大型活動…

LeetCode -- 204. Count Primes

題目標簽 HashTab&#xff08;哈希表&#xff09; 題意及思路 題意&#xff1a;略 思路&#xff1a;有關素數的題目我所知道有兩種做法。一種是最基本的isPrime算法&#xff0c;關鍵點在循環判斷時&#xff0c;上限為Math.sqrt(n) &#xff08;求n是否為素數&#xff09;。另外…

如何尋找無序數組中的第K大元素?

如何尋找無序數組中的第K大元素&#xff1f; 有這樣一個算法題&#xff1a;有一個無序數組&#xff0c;要求找出數組中的第K大元素。比如給定的無序數組如下所示&#xff1a; 如果k6&#xff0c;也就是要尋找第6大的元素&#xff0c;很顯然&#xff0c;數組中第一大元素是24&am…

【第三趴】uni-app頁面搭建與路由配置(了解工程目錄結構、學會搭建頁面、配置路由并成功運行)

文章目錄 寫在前面工程結構新頁面呈現寫在最后本期推薦寫在前面 聚沙成塔——每天進步一點點,大家好我是幾何心涼,不難發現越來越多的前端招聘JD中都加入了uni-app 這一項,它也已經成為前端開發者不可或缺的一項技能了,所以涼哥為大家推出 聚沙成塔【45天玩轉uni-app】專欄…