1.同步和異步數據庫
同步:正在處理一件事情,必須等待徹底處理好之後,返回處理結果,纔算完成。緩存
例如,打電話須要一直處於等待狀態,不可以作其餘的事情,直到對方接電話,纔算完成。服務器
異步:正在處理一件事情,沒有等待處理好,又去忙於其餘的事情,只要處理好通知一下就行。併發
代碼開發中通常經過狀態(須要不定時查看狀態,低效率,高消耗)、通知、回調函數獲取處理結果。負載均衡
例如,發消息,只要發送了消息給某人,不須要等待,能夠作其餘的事情,當這人收到消息,回覆你或者短信中心通知你消息到達,表示此過程完成。異步
2.阻塞式和非阻塞式函數
阻塞式:處理一件事情,必需要等待返回結果之後,纔算完成。高併發
例如,去銀行排隊存錢,在這期間,你會排隊等待直到完成整件事情。網站
非阻塞式:處理一件事情,在等待的同時作其餘事情,直到最後處理完成。事件
例如,去銀行排隊存錢,在這期間,你也能夠打電話,聊天,看電視等,直到最終存好錢。
區別:通常阻塞式沒有返回結果之前就會被掛起。
3.併發和並行
併發:兩個或多個事件在同一時間間隔發生,在一臺處理器上「同時」處理多個任務。
並行:兩個或者多個事件在同一時刻發生,在多臺處理器上同時處理多個任務。
區別:併發是在同一個時間間隔內cpu交替處理多個任務,並行主要是對應多個處理器而言
能夠在同一時刻處理多個任務。
4.髒數據
髒讀就是指當一個事務正在訪問數據,而且對數據進行了修改,而這種修改尚未提交到數據庫中,這時,另一個事務也訪問這個數據,而後使用了這
個數據。由於這個數據是尚未提交的數據,那麼另一個事務讀到的這個數據是髒數據(Dirty Data),依據髒數據所作的操做多是不正確的
5.不可重複讀
不可重複讀是指在一個事務內,屢次讀同一數據。在這個事務尚未結束時,另一個事務也訪問該同一數據。那麼,在第一個事務中的兩次讀數據之間,因爲第二個事務的修改,那麼第一個事務兩次讀到的數據多是不同的。這樣就發生了在一個事務內兩次讀到的數據是不同的,所以稱爲是不可重複讀
6.高併發中經常使用的鎖機制,悲觀鎖、樂觀鎖
悲觀鎖:是對數據被外界(包括本系統當前的其餘事務,以及來自 外部系統的事務處理)修改持保守態度,所以,在整個數據處理過程當中,將數據處於鎖定狀態。
樂觀鎖:大可能是基於數據版本 Version )記錄機制實現,過爲數據庫表增長一個 「version」 字段來 實現。 讀取出數據時,將此版本號一同讀出,以後更新時,對此版本號加一。此時,將提 交數據的版本數據與數據庫表對應記錄的當前版本信息進行比對,若是提交的數據 版本號大於數據庫表當前版本號,則予以更新,不然認爲是過時數據。
例如,一個金融系統,當某個操做員讀取用戶的數據,並在讀出的用戶數據的基礎上進 行修改時(如更改用戶賬戶餘額),若是採用悲觀鎖機制,也就意味着整個操做過 程中(從操做員讀出數據、開始修改直至提交修改結果的全過程,甚至還包括操做 員中途去煮咖啡的時間),數據庫記錄始終處於加鎖狀態,能夠想見,若是面對幾 百上千個併發,這樣的狀況將致使怎樣的後果
7.高併發解決方案
1)利用緩存機制,用戶請求時將數據保存在緩存中,下次請求先直接從緩存中取數據,若是沒有在執行查詢操做。
2)HTML靜態化,創建CMS系統(內容管理系統),經過用戶(信息錄入人員)錄入數據,生成HTML頁面,常經過模版的形式動態生成。
3)圖片服務器同應用服務器分離,減輕應用服務器的壓力。
4)數據庫集羣,經過創建數據庫集羣,緩解大量數據訪問的壓力。
5)鏡像技術
6)負載均衡,大型網站解決高負荷訪問和大量併發請求採用的終極解決辦法,分攤到多個操做單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工做任務。