詳請
管道pipe:管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
命名管道fifo:有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。
訊息佇列messagequeue:訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
共享儲存sharedmemory:共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。
訊號量semaphore:訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。
套接字socket:套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。
訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。
這裡是他人部落格講解的詳情
1、臨界區:通過對多執行緒的序列化來訪問公共資源或一段**,速度快,適合控制資料訪問。在任意時刻只允許乙個執行緒對共享資源進行訪問,如果有多個執行緒試圖訪問公共資源,那麼在有乙個執行緒進入後,其他試圖訪問公共資源的執行緒將被掛起,並一直等到進入臨界區的執行緒離開,臨界區在被釋放後,其他執行緒才可以搶占。它並不是核心物件,不是屬於作業系統維護的,而是屬於程序維護的。
總結下關鍵段:
1)關鍵段共初始化化、銷毀、進入和離開關鍵區域四個函式。
2)關鍵段可以解決執行緒的互斥問題,但因為具有「執行緒所有權」,所以無法解決同步問題。
3)推薦關鍵段與旋轉鎖配合使用。
2、互斥物件:互斥物件和臨界區很像,採用互斥物件機制,只有擁有互斥物件的執行緒才有訪問公共資源的許可權。因為互斥物件只有乙個,所以能保證公共資源不會同時被多個執行緒同時訪問。當前擁有互斥物件的執行緒處理完任務後必須將執行緒交出,以便其他執行緒訪問該資源。
總結下互斥量mutex:
1)互斥量是核心物件,它與關鍵段都有「執行緒所有權」所以不能用於執行緒的同步。
2)互斥量能夠用於多個程序之間執行緒互斥問題,並且能完美的解決某程序意外終止所造成的「遺棄」問題。
3、訊號量:訊號量也是核心物件。它允許多個執行緒在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目
在用createsemaphore()建立訊號量時即要同時指出允許的最大資源計數和當前可用資源計數。一般是將當前可用資源計數設定為最 大資源計數,每增加乙個執行緒對共享資源的訪問,當前可用資源計數就會減1 ,只要當前可用資源計數是大於0 的,就可以發出訊號量訊號。但是當前可用計數減小 到0 時則說明當前占用資源的執行緒數已經達到了所允許的最大數目,不能在允許其他執行緒的進入,此時的訊號量訊號將無法發出。執行緒在處理完共享資源後,應在離 開的同時通過releasesemaphore ()函式將當前可用資源計數加1 。在任何時候當前可用資源計數決不可能大於最大資源計數。
4、事件物件: 通過通知操作的方式來保持執行緒的同步,還可以方便實現對多個執行緒的優先順序比較的操作
總結下事件event
1)事件是核心物件,事件分為手動置位事件和自動置位事件。事件event內部它包含乙個使用計數(所有核心物件都有),乙個布林值表示是手動置位事件還是自動置位事件,另乙個布林值用來表示事件有無觸發。
2)事件可以由setevent()來觸發,由resetevent()來設成未觸發。還可以由pulseevent()來發出乙個事件脈衝。
3)事件可以解決執行緒間同步問題,因此也能解決互斥問題。
在兩個或者多個併發程序中,如果每個程序持有某種資源而又等待其它程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖。通俗的講就是兩個或多個程序無限期的阻塞、相互等待的一種狀態。
死鎖產生的四個條件(有乙個條件不成立,則不會產生死鎖)
產生死鎖的原因:(1)競爭系統資源 (2)程序的推進順序不當
預防死鎖: 資源一次性分配:(破壞請求和保持條件) 可剝奪資源:即當某程序新的資源未滿足時,釋放已占有的資源(破壞不可剝奪條件)
資源有序分配法:系統給每類資源賦予乙個編號,每乙個程序按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)
避免死鎖: 預防死鎖的幾種策略,會嚴重地損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得
較滿意的系統效能。由於在避免死鎖的策略中,允許程序動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序;否則,程序等待。其中最具有代表性的避免死鎖演算法是銀行家演算法。
檢測死鎖
首先為每個程序和每個資源指定乙個唯一的號碼, 然後建立資源分配表和程序等待表
解除死鎖:
當發現有程序死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有:
剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態;
撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀態.消除為止;所謂代價是指優先順序、執行代價、程序的重要性和價值等。
緩衝區溢位是指當計算機向緩衝區填充資料時超出了緩衝區本身的容量,溢位的資料覆蓋在合法資料上
危害有以下兩點:
造成緩衝區溢位的主要原因是程式中沒有仔細檢查使用者輸入。
mysql 網際網路 MySQL網際網路業務使用建議
一 基礎規範 表儲存引擎必須使用innodb 表字符集預設使用utf8,必要時候使用utf8mb4 解讀 1 通用,無亂碼風險,漢字3位元組,英文1位元組 2 utf8mb4是utf8的超集,有儲存4位元組例如表情符號時,使用它 禁止使用儲存過程,檢視,觸發器,event 解讀 1 對資料庫效能影響...
網際網路與網際網路的區別
網際網路的英文單詞是 internet,網際網路的英文單詞是 internet。在英語中,專有名詞首字母都是大寫,用於特指某一事物。大寫的 internet 是作為乙個專有名詞出現的,所指的是由阿帕網發展而來的現如今全球最大的計算機網路,稱之為網際網路。小寫 internet 是作為乙個普通單詞出現...
網際網路之父Vint Cerf 網際網路的下乙個十年
據國外 報道,谷歌在自己的官方部落格上發表了對網際網路未來發展的觀點。在採訪了10位頂級電腦專家後,google首席網際網路顧問 有網際網路之父美譽的 vint cerf發表文章認為,10年來網際網路的發展對人們的生活產生了巨大影響,改變了政治 娛樂 文化 商業 醫療 環境和所有能想到的東西。未來網...