原创 軟件設計中的同步異步單線程多線程優缺點分析

同步還是異步,單線程還是多線程是我們軟件開發中經常面臨的設計選擇,只有準確的區分它們之間的優缺點,才能根據我們的實際應用場景作出正確選擇。它們兩兩組合一共有四種模式,下面就我自己的理解做一些總結分析。  1、同步單線程模式 優點:a)實現

原创 TCP與UDP各自特點對比

UDP和TCP是我們最常用的兩種通信方式,下面就兩者之間的特點做一個對比:  1、UDP主要用在實時性要求高以及對質量相對較弱的地方,如流媒體。  2、TCP既然是面向連接的,那麼運行環境必然要求其保證可靠性,具有不可丟包、有良好的擁塞控

原创 Malloc函數的線程安全與可重入性分析

malloc函數是一個我們經常使用的函數,如果不對會造成一些潛在的問題。下面就malloc函數的線程安全性和可重入性做一些分析。  我們知道一個函數要做到線程安全,需要解決多個線程調用函數時訪問共享資源的衝突。而一個函數要做到可重入,需要

原创 Linux進程調度與內核搶佔總結

Linux2.6以後支持內核搶佔,在開發過程中內核搶佔經常會造成一些競態問題,分析起來比較麻煩,所以有必要總結一下觸發搶佔的因素和時機。  一、觸發搶佔的因素 1、進程調用sleep或exit等函數進行狀態切換,這些函數通過系統調用進入

原创 高併發軟件設計的幾種方式

本文就高併發軟件設計中可以考慮使用的一些方法做如下總結:  1)多線程有利於提高CPU佔用率,因爲軟件本身的線程越多,在和系統上其他線程爭奪CPU資源時就能分配到更多執行資源,同時也能提高業務處理的併發性。  2)非阻塞IO能夠在IO操作

原创 模塊間通信時對象序列化方式比較

軟件主要是由一個個的模塊,以及模塊間的通信組成的。不論哪種模塊間通信方式,其底層承載的都是碼流形式的數據。因此,模塊間通信其中一個重要工作是把模塊中的數據對象序列化成碼流,然後發送到其他模塊,再反序列化還原成數據對象,以此完成通信過程。

原创 Linux進程上下文和中斷上下文總結

在Linux系統下,CPU總是處於下面三種狀態之一: 1、內核態,運行進程上下文。 2、內核態,運行於中斷上下文。 3、用戶態,運行進程上下文。 進程上下文和中斷上下文是Linux系統一個比較重要的概念,下面從程序的角度總結一下各屬於哪種

原创 C語言系統內存被踩情況總結

C語言由於可以直接操作內存,給我們的編程帶來了便利,同時也帶來了內存寫越界之類的問題,常常造成我們的系統crash。下面總結了我在工作中碰到的導致內存越界的各種場景,以供分析此類問題時作個參考。 1、直接寫越界,包括1)棧空間變量寫越界覆

原创 C語言系統自己管理內存分配的好處

C語言系統沒有內置的內存管理機制,通常是在需要使用內存的時候,動態的通過malloc在堆空間申請內存。這種做法有一定的缺陷,在較大的系統中往往會自己做內存分配管理,我想原因大致如下: 1)內存申請操作是比較耗時的,所以可以通過把預先申請的

原创 一種在Windows資源管理器添加右鍵菜單命令來打開選定目錄DOS窗口的方法

我們在用windows時經常需要在某個目錄下執行執行一些dos命令,通常我們會在開始菜單的運行下鍵入:cmd,開啓dos命令窗口,然後在cd到目標操作目錄,每次這樣操作比較麻煩。下面介紹一種直接在資源管理器選定目標目錄打開dos命令窗口的

原创 《重構》讀書總結

前段時間我看了《重構》這本書,在閱讀過程中,我就每個重構方法的目的就自己的理解做了一些總結,如下: 1      重新組織函數 1.1 提煉函數(Extract Method) 解釋:如果一個函數過於複雜,就把它拆分爲多個職責清晰的小函數

原创 ACE框架解讀 - 特性篇

ACE是一個很著名的網絡服務開發框架,最近研究它,發現裏面有一些框架特有的概念,下面我就對這些概念的理解做一下總結。  1、網絡接口的C++包裝 通過給網絡編程API進行外觀模式的封裝,向用戶提供簡單的網絡接口對象,簡化用戶編程。  2

原创 ACE框架解讀 - 源碼篇

最近研究了ACE框架的源碼,先考慮選取最新版本ACE6.0來讀,但是發現代碼量有30多萬行,規模太大了花的時間會比較多,所以考慮選取舊一些的版本,最後選取ACE4.5版本來閱讀,代碼量13萬行比較適中。 下面是我讀代碼時的一些總結,把所

原创 Java語言與C++語言的差異總結

Java的設計者曾說過,設計這門語言的靈感主要來自於C++。 世上先有C++,然後纔有Java,整個Java語言的發展歷史就是一部對C++的填坑史。所以在Java語言學習過程中,將其與C++語言對比是一件有意義的事情。通過這些對比,我們能

原创 關於SSH框架設計的一些理解

最近在學習企業開發領域很流行的SSH框架(Struts、Hibernate、Spring),由於之前有做過原生的Servlet+JSP的項目,所以在學習過程中我會跟原生開發模式進行對比,在這裏我把自己的一些理解做下小結。 1、Servle