原创 進程間關係

進程組每個進程除了有⼀個進程ID之外,還屬於⼀個進程組。進程組是⼀個或多個進程的集合。通常,它們與同⼀作業相關聯,可以接收來⾃同⼀終端的各種信號。每個進程組有⼀個唯⼀的進程組ID。每個進程組都可以有⼀個組⻓進程。組⻓進程的標識是,其進程組

原创 Linux - 線程特性舉例

這裏主要演示線程的以下幾個特性線程共享同一地址空間(全局變量,堆,棧)線程退出引起進程退出多線程充分利用多核CPU資源同組線程共用同一地址空間全局變量#include <stdio.h>#include <stdlib.h>#includ

原创 守護進程

認識守護進程守護護進程也稱精靈進程(Daemon),是運⾏在後臺的⼀種特殊進程。它獨⽴於控制終端並且週期性地執⾏某種任務或等待處理某些發⽣的事件。Linux系統啓動時會啓動很多系統服務進程,這些系統服務進程沒有控制終端,不能直接和⽤戶交互

原创 讀者寫者模型

讀者寫者模型鎖類型 : 自旋鎖,一直佔用着CPU,在未獲得鎖的情況下,會一直自選的等待,如果不能在短時間內獲得鎖,會使CPU效率很低.應用場景 :對於一塊公共資源來說,讀取的頻率比較高,但是寫的頻率很低.通常而言,在讀的過程中,往往伴隨着

原创 C++ - STL

STL概念 STL是C++標準庫最重要的組成部分,STL即標準模板庫,不僅是一個可複用的組件庫,而且是一個包羅算法和數據結構的軟件框架。STL的六大組件容器 - 一些數據結構迭代器空間配置器適配器算法仿函數以算法和容器爲核心。容器什麼是容

原创 STL - vector的使用

vector結構start指向這塊空間的起始位置finish指向有效元素的後一個位置end_of_storage指向這塊空間的下一個位置vector的迭代器 vector迭代器的底層其實就是一個原生指針,對迭代器的 ++ 等同於對指針做

原创 生產者消費者模型

生產者消費者模型生產者 生產者消費者模型鎖類型 - 掛起等待鎖一種場景這裏指上面的倉庫,我們可以用棧,鏈表等數據結構構造. 兩個角色生產者 - 負責向上面的倉庫中生產資源,倉庫已滿時,需等待到倉庫有空爲止.消費者 - 負責消費上面倉庫中的

原创 Linux - 線程控制

內核中並沒有線程的概念,只有PCB的概念,所以線程並沒有系統調用。但是爲了使用戶操作線程方便,就有大佬封裝了一個POSIX線程庫,可以使我們在用戶層完成線程的創建銷燬、以及其他操作。POSIX線程庫使用時需要包含 <pthread.h> 

原创 Linux - 線程互斥

互斥量(mutex)很多變量需要在線程間共享,這個變量就稱爲共享變量,可以通過共享數據完成線程之間的交互.但是,多個線程併發的操作共享變量就會出現問題.如下模擬實現一個網上購票系統:#include <stdio.h>#include <

原创 進程間通信 - 共享內存

共享內存如上圖所示,多個進程之間通過自己的頁表,映射到物理內存的共享區,現在這些進程都可以對這個共享區域的數據進行操作,且一個進程操作了這塊空間的數據,其他的進程也可以“看得到”。和管道/消息隊列比起來共享內存的效率是比較高的      

原创 淺談 HTTP

URL格式URL即'網址'服務器地址實際上是指ip地址,這裏用域名錶示,便於記憶http服務器端口號默認80,可以不使用80帶層次的文件路徑不同,訪問服務器上的文件就不同查詢字符串 : 都是以鍵值對的方式存儲的, 鍵和值之間使用等號分隔,

原创 Linux - 線程基礎概念

理解線程,必須先理解進程!!什麼是進程(PCB)進程pid - 進程有很多,需要有一個區分和標識內存指針 - 進程運行時需要依賴代碼和數據,所以有一個內存指針指向進程所需要的代碼和數據,指向虛擬地址空間進程有很多,而CPU只有幾個,那麼進

原创 Linux - 線程同步

條件變量使用互斥鎖可以解決線程安全的問題,保證多線程下臨界資源數據的正確性.但是僅僅互斥還是會存在一些問題.某個線程獲取鎖之後, 發現數據沒有就緒, 又立刻釋放鎖.如果這個線程的優先級很高, 那麼就可能在釋放了鎖之後又立刻嘗試獲取鎖, 再

原创 Linux - 信號

信號,將內核和進程聯繫起來,是操作系統內部交互的機制。通過kill -l指令查看所有信號注意,這裏沒有32,33號信號,也是從這裏將信號分爲兩類,1~31位普通信號,34~64爲實時信號信號產生原因 通過鍵盤按鍵產生信號ctrl-c:2號

原创 UDP協議

UDP協議格式16位UDP長度表示整個數據報(UDP首部+UDP數據)的最大長度;不可靠傳輸 : 如果校驗出錯,就直接丟棄;UDP特點無連接 : 知道對端的IP和端口號就直接進行傳輸,不需要簡歷連接;不可靠 : 沒有確認機制,沒有重傳機制