1. 程式人生 > >高併發和多執行緒的關係

高併發和多執行緒的關係

        高併發 ≠ 多執行緒

  多執行緒是完成任務的一種方法,高併發是系統執行的一種狀態,通過多執行緒有助於系統承受高併發狀態的實現。

  高併發是一種系統執行過程中遇到的一種“短時間內遇到大量操作請求”的情況,主要發生在web系統集中大量訪問或者socket埠集中性收到大量請求(例如:12306的搶票情況;天貓雙十一活動)。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,資料庫的操作等。如果高併發處理不好,不僅僅降低了使用者的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等。如果要想系統能夠適應高併發狀態,則需要從各個方面進行系統優化,包括,硬體、網路、系統架構、開發語言的選取、資料結構的運用、演算法優化、資料庫優化……而多執行緒只是其中解決方法之一

實現高併發需要考慮:
          系統的架構設計,如何在架構層面減少不必要的處理(網路請求,資料庫操作等)
          網路拓撲優化減少網路請求時間、如何設計拓撲結構,分散式如何實現?
          系統程式碼級別的程式碼優化,使用什麼設計模式來進行工作?哪些類需要使用單例,哪些需要儘量減少new操作?
         提高程式碼層面的執行效率、如何選取合適的資料結構進行資料存取?如何設計合適的演算法?
         任務執行方式級別的同異步操作,在哪裡使用同步,哪裡使用非同步?
        JVM調優,是以server模式還是以clien模式執行,如何設定Heap、Stack、Eden的大小,如何選擇GC策略,控制Full GC的頻率?
        資料庫優化減少查詢修改時間。資料庫的選取?資料庫引擎的選取?資料庫表結構的設計?資料庫索引、觸發器等設計?是否使用讀寫分離?還是需要考慮使用資料倉庫?
        快取資料庫的使用,如何選擇快取資料庫?是Redis還是Memcache? 如何設計快取機制?
       資料通訊問題,如何選擇通訊方式?是使用TCP還是UDP,是使用長連線還是短連線?NIO還是BIO?netty、mina還是原生   socket?

以上的這些問題在高併發中都是必須要深入考慮的,就像木桶原理一樣,只要其中的某一方面沒有考慮到,都會造成系統瓶頸,影響整個系統的執行。而高併發問題不僅僅涉及面之廣,同時又要求有足夠的深度!!!

  多執行緒在這裡只是在同/非同步角度上解決高併發問題的其中的一個方法手段,是在同一時刻利用計算機閒置資源的一種方式。

多執行緒在解決高併發問題中所起到的作用就是使計算機的資源在每一時刻都能達到最大的利用率,不至於浪費計算機資源使其閒置。

相關推薦

併發執行關係

        高併發 ≠ 多執行緒   多執行緒是完成任務的一種方法,高併發是系統執行的一種狀態,通過多執行緒有助於系統承受高併發狀態的實現。   高併發是一種系統執行過程中遇到的一種“短時間內遇到大量操作請求”的情況,主要發生在web系統集中大量訪問或者socket埠

併發、並行、併發執行

1.併發和並行的區別   併發:當有多個執行緒在操作時,如果系統只有一個CPU,把CPU執行時間劃分成若干個時間段,分配給各個執行緒執行,在一個時間段的執行緒程式碼執行時,其它執行緒處於掛起狀態。這種方式我們稱之為併發(Concurrent)。併發=間隔發生 並行:當系

併發執行關係、區別、併發的技術方案

高併發與多執行緒的關係、區別、高併發的技術方案 http://youzhixueyuan.com/high-concurrency-and-multithreading-high-concurrency-technical-solutions.html 什麼是高併發? 高併發(High

SimpleDateFormat時間格式化併發執行時出現問題

SimpleDateFormat是是 Java 中一個非常常用的類,該類用來對日期字串進行解析和格式化輸出,但是DateFormat 和 SimpleDateFormat 類不都是執行緒安全的,在生產環境的多執行緒或高併發情況使用 format() 和 parse() 方法,會出現很多問題:

java併發執行

volatile—保證可見性、禁止指令重排序,不保證原子性 出於執行速率的考慮,java編譯器會把經常訪問的變數存放在快取,直接從快取中讀取變數,多執行緒下記憶體與快取不一樣 volatile不會被快取到暫存器,多執行緒下可見 使用條件: 只有單個執行緒更新變數的值 該變數不與

Java併發程式設計——執行

執行緒簡介 程序 正在執行的程式。 程序是系統進行資源分配和呼叫的獨立單位。每一個程序都有他自己的記憶體空間和系統資源。 執行緒 在同一個程序內又可以執行多個任務。而這每一個任務就可以看成是一個執行緒。

Python框架下django 的併發執行

django 的併發能力真的是令人擔憂,django本身框架下只有一個執行緒在處理請求,任何一個請求阻塞,就會影響另一個情感求的響應,尤其是涉及到IO操作時,基於框架下開發的檢視的響應並沒有對應的開啟多執行緒,再者Python的多執行緒對於多核CPU有效利用率非常低,參照 這裡就使用 nginx

【Django】Uwsgi+Nginx+Django2.0+Python3.7實現併發執行,高效能

一、系統以及環境 伺服器系統:Ubuntu 16.04 專案環境:python 3.7 框架:Django2.0 伺服器環境:Uwsgi、Nginx 效能監測工具:Uwsgitop 使用背景:因為Dj

執行併發執行的設計模式

多執行緒的設計模式 程式碼在Multi_004當中 並行設計模式屬於設計優化的一部分,他是對一些常用的多執行緒結構的總結和抽象,與序列程式相比,並行程式的結構通常更為複雜,因此合理的使用並行模式在多執行緒開發中更具有意義,在這裡主要介紹Futur

【本人禿頂程式設計師】你分得清分散式、併發執行嗎?

←←←←←←←←←←←← 快,點關注! 當提起這三個詞的時候,是不是很多人都認為分散式=高併發=多執行緒? 當面試官問到高併發系統可以採用哪些手段來解決,或者被問到分散式系統如何解決一致性的問題,是不是一臉懵逼? 確實,在一開始接觸的時候,不少人都會將三者混淆,誤以為所謂的分散式

如何分清分散式、併發執行嗎?

當提起這三個詞的時候,是不是很多人都認為分散式=高併發=多執行緒? 當面試官問到高併發系統可以採用哪些手段來解決,或者被問到分散式系統如何解決一致性的問題,是不是一臉懵逼?   確實,在一開始接觸的時候,不少人都會將三者混淆,誤以為所謂的分散式高併發的

JAVA模擬併發執行計數器

1、多執行緒高併發模擬實現可採用閉鎖CountDownLatch,設定對應執行緒數的CountDownLatch,達到就緒條件後會多執行緒統一執行。這裡只是單機模擬,因為執行緒採用搶佔式執行方式,並不能完全模擬統一同時執行。 2、多執行緒計數器可採用悲觀鎖CAS實現類Ato

Java併發(三)——執行協作,同步控制

      繼上一篇:Java高併發——多執行緒基礎 中講到,共享資源的合理使用,才能夠使多執行緒程式有條不紊的執行。其中我們通過synchronized來實現臨界區資源的是否可以訪問。而,這篇我們來重點總結synchronized的增強替代版鎖,以及其它JDK併發包提供的一

併發執行區別

1、高併發     高併發是一種狀態,如果大量請求訪問閘道器介面。這種情況會發生大量執行操作,如資料庫操作、資源請求、硬體佔用等。這就需要對介面進行優化,而多執行緒是處理高併發的一種手段。 2、多執行緒     是一種非同步處理的一種方式,在同一時刻最大限度的利用計

執行併發(一)執行入門

一、基礎概念 多執行緒的學習從一些概念開始,程序和執行緒,併發與並行,同步與非同步,高併發。 1.1 程序與執行緒 幾乎所有的作業系統都支援同時執行期多個任務,所有執行中的任務通常就是一個程序,程序是處於執行過程中的程式,程序是作業系統進行資源分配和排程的一個獨立單位。 程序有三個如下特徵:

Java併發執行(一)-----概念

其實之前一直想專門寫一篇,單獨說一說Java的多執行緒與高併發,但是一直以來,都沒有想到能夠用什麼比較有趣的表現形式去表達出來,而且網上充斥著很多類似的部落格,有好的又不好的,有簡介的有繁瑣的,所以也一直沒寫。 但是想了想既然之前有這個想法,而且也已經好久沒有寫過部落格了,索性還是寫一寫,儘量寫的有意思一點

Java併發執行(二)-----執行的實現方式

今天,我們開始Java高併發與多執行緒的第二篇,執行緒的實現方式。     通常來講,執行緒有三種基礎實現方式,一種是繼承Thread類,一種是實現Runnable介面,還有一種是實現Callable介面,當然,如果我們鋪開,擴充套件一下,會有很多種實現方式,但是歸根溯源,其實都是這幾種實

【Linux】併發伺服器模型(程序模型執行模型)

多程序併發伺服器 使用多程序併發伺服器時要考慮以下幾點:             1.      父程序最大檔案描述個數(父程序中需要close關閉accept返回的新檔案描述符)             2.      系統內建立程序個數(與記憶體大小相關)      

併發程式設計:執行安全ThreadLocal

執行緒安全的概念:當多個執行緒訪問某一個類(物件或方法)時,這個類始終都能表現出正確的行為,那麼這個類(物件或方法)就是執行緒安全的。 執行緒安全 說的可能比較抽象,下面就以一個簡單的例子來看看什麼是執行緒安全問題。 public class MyThread impleme

網路程式設計併發執行程式設計

多執行緒threading 執行緒與程序的區別可以歸納為以下4點:   1)地址空間和其它資源(如開啟檔案):程序間相互獨立,同一程序的各執行緒間共享。某程序內的執行緒在其它程序不可見。   2)通訊: 程序間通訊 IPC,執行緒間可以直接讀寫程序資料段(如全域性變數)來進行通訊——