原创 GCC 常用命令參數(轉)

gcc這條命令用來將源代碼生成可執行程序,下面來看一下gcc的常用選項。 1、無選項編譯鏈接 例:命令:gcc test.c //會默認生成a.out可執行程序 2、-E: 進行預處理和編譯,生成彙編文件。 命令:

原创 線程池基礎

爲什麼要有線程池 沒有線程池會出現的問題。    大多數的網絡服務器,包括Web服務器都具有一個特點,就是單位時間內必須處理數目巨大的連接請求,但是處理時間卻是比較短的。在傳統的多線程服務器模型中是這樣實現的:一旦有個請求到達,就創建一個

原创 Linux 線程基礎

什麼是線程 什麼是進程 線程是計算機中運算調度的最小單位, 他在進程的地址空間內運行。 是進程實際運作單位 一條線程是進程中單一順序的執行流 。線程使操作系統調度執行的基本單位。 而進程是操作系統中資源分配的基本單位,進程有自

原创 STL容器 map 與 set 的用法

認識pair 在介紹容器之前,我們先來介紹一下pair,pair是一種結構體模板類型,每個pair可以存儲兩個值,這兩個值的類型可以是任何類型的。它定義在 #include< uitility >中。在set map中使用pair的原因是

原创 剖析STL空間適配器

爲什麼要有空間配置器 1、小塊內存帶來的內存碎片問題 單從分配的角度來看。由於頻繁分配、釋放小塊內存容易在堆中造成外碎片(極端情況下就是堆中空閒的內存總量滿足一個請求,但是這些空閒的塊都不連續,導致任何一個單獨的空閒的塊都無法滿足

原创 設計模式之工廠模式

工廠模式大致可以分爲三類: 1、簡單工廠模式 2、工廠方法模式 3、抽象工廠模式。 這三種模式逐步抽象,並且更具有一般性。 工廠模式有一種非常形象的描述,建立對象的類就像一個工廠,而需要被建立的對象就是一個個產品,在工

原创 關於C++對象模型的經典問題

關於C++ 的繼承 多態 和與之相關的對象模型知識,各個書本上很多了 今天來看幾個對象模型的問題 在實踐中理解C++ 對象模型: 1、 在下列代碼中: class A { public : A()

原创 互斥鎖與自旋鎖

下面摘錄一些關於C++當中 自旋鎖(spin lock)與互斥量(mutex)的比較 自旋鎖是一種非阻塞鎖,也就是說,如果某線程需要獲取自旋鎖,但該鎖已經被其他線程佔用時,該線程不會被掛起,而是在不斷的消耗CPU的時間,不停的試圖獲取

原创 Linux進程間通信之 共享內存

對共享內存的理解 基於共享內存的進程間通信方式,本質上是將兩個進程的頁表把各自地址空間上的數據映射到同一塊物理內存上。使得兩塊進程之間在自己的地址空間同時看到一份公共資源。 基於共享內存的進程間通信一旦將兩個進程地址空間映射到同一物理內存

原创 IO多路複用之---select----poll----epoll

五種IO模型 1、阻塞式IO: recv recvfrom read 讀文件描述符當文件描述符裏面沒有數據則阻塞式等待。等待的時候這個等待的線程/進程被掛起。 2、非阻塞式IO: 輪詢式。 recvfrom read r

原创 堆排序

堆排序 堆排序是一種特殊的選擇排序。 大的原則還是如果升序 選擇待排序類中最大排序碼的元素放在最後位置 再選次大的放在倒數第二位置上 。。。。。最後把最小的放在第一個位置上。 堆排序是藉助建堆和堆的向下調整算法進行選擇的。 堆排序是一

原创 Linux 線程的同步與互斥

多個線程併發共同操作臨界資源會出問題 各個線程代碼的訪問公共變量的代碼段中,加減 不是原子操作, 判斷前後等等任意地方,一個線程的代碼會被CPU切出,另一個線程重新來執行代碼。這會發生邏輯錯誤。爲此我們必須提供同步與互斥機制。 互斥機制

原创 排序之-----插入排序於希爾排序

插入排序 插入排序基本思想:每一步將一個元素的排序碼按照大小,插入到前面已經排好序的元素之中的合適位置,直到最後一個元素也插入了他之前的有序序列。 直接插入排序 將array[i] 插到已經有序的array[0] array[i] …

原创 非比較排序之 計數排序與基數排序

非比較排序 與插入、希爾、快速、歸併、堆排序等等排序方式不同的是 以上這些排序算法都涉及到待排序列中元素值的比較。 然而也有不需要比較的排序算法。 計數排序 計數排序主要思想: 給定一組要排序的序列,找出這組序列中的最大值,然後

原创 Linux IPC之信號量

理解信號量。 System V 版本有消息隊列 ,共享內存, 信號量 這幾種進程間通信方式。其中信號量的作用是爲了協調進程之間的同步與互斥。 同步:多進程/線程 要進行共同完成一項工作必須依照一定的次序協同完成,否則無法完成或者效率低