10.12 C 語言實現的跨平臺開發庫 TBOX

TBOX概述

TBOX 是一個用 C 語言實現的跨平臺開發庫。針對各個平臺,封裝了統一的接口,簡化了各類開發過程中常用操作,使你在開發過程中,更加關注實際應用的開發,而不是把時間浪費在瑣碎的接口兼容性上面,並且充分利用了各個平臺獨有的一些特性進行優化。這個項目的目的,是為了使 C 開發更加的簡單高效。並且提供微內核編譯模式,針對嵌入式平臺進行優化,僅生成 64K 大小的精簡庫。目前支持的平臺有:

  • Windows
  • Macosx
  • Linux
  • Android
  • iOS
C 語言實現的跨平臺開發庫 TBOX

TBOX功能

流庫

針對http、file、socket、data等流數據,實現統一接口進行讀寫,並且支持: 阻塞、非阻塞、異步 三種讀寫模式。 支持中間增加多層filter流進行流過濾,實現邊讀取,內部邊進行解壓、編碼轉換、加密等操作,極大的減少了內存使用。主要提供以下模塊:

  • stream:通用非阻塞流,用於一般的單獨io處理,同時支持協程以實現異步傳輸。
  • transfer:流傳輸器,維護兩路流的傳輸。
  • static_stream:針對靜態數據buffer優化的靜態流,用於輕量快速的數據解析。

協程庫

  • 快速高效的協程切換支持(具體性能參考:基準測試報告)
  • 提供跨平臺支持,核心切換算法參考boost,並且對其進行重寫和優化,目前支持架構:x86, x86_64, arm, arm64
  • 提供channel協程間數據通信支持,基於生產、消費者模型
  • 提供信號量、協程鎖支持
  • socket、stream都模塊原生支持協程,並且可在線程和協程間進行無縫切換
  • 提供http、file等基於協程的簡單服務器實例,只需幾百行代碼,就可以從socket開始寫個高性能io服務器,代碼邏輯比異步回調模式更加清晰
  • 提供stackfull和stackless兩種協程模式支持,接口類似,stackfull更加靈活易用, stackless更加輕量高效

數據庫

  • 統一併簡化數據庫操作接口,適配各種數據源,通過統一的url來自動連接打開支持的數據庫,數據的枚舉採用迭代器模型。
  • 目前支持sqlite3以及mysql兩種關係型數據庫,也可自定義擴展使用其他關係型數據庫。

xml庫

  • 針對xml提供DOM和SAX兩種解析模式,SAX方式採用外部迭代模式,靈活性和性能更高,並且可以選擇指定路徑,進行解析。
  • 解析過程完全基於stream,所以是高度流化的,可以實現邊下載、邊解壓、邊轉碼、邊解析一條龍服務,使用較低的內存也可以解析大規模數據。
  • 提供xml writer以支持對xml生成

內存庫

  • 參考linux內核內存管理機制的實現,並對其進行各種改造和優化,所實現的TBOX獨有的一整套內存池管理架構。
  • 調試模式下,可以輕鬆檢測並定位內存洩露、內存越界溢出、內存重疊覆蓋等常見內存問題,並對整體內存的使用進行了統計和簡要分析。
  • 針對大塊數據、小塊數據、字符串數據進行了充分的利用,避免了大量外部碎片和內部碎片的產生。分配操作進行了各種優化,96%的情況下,效率都是在O(1)。

容器庫

  • 提供哈希、鏈表、數組、隊列、堆棧、最小最大堆等常用容器。
  • 支持各種常用成員類型,在原有的容器期初上,其成員類型還可以完全自定義擴展。
  • 所有容器都支持迭代器操作。
  • 大部分容器都可以支持基於stream的序列化和反序列化操作。

算法庫

  • 提供各種排序算法:冒泡排序、堆排序、快速排序、插入排序。
  • 提供各種查找算法:線性遍歷、二分法搜索。
  • 提供各種遍歷、刪除、統計算法。
  • 以迭代器為接口,實現算法和容器的分離,類似stl,但是c實現的,更加輕量。

網絡庫

  • 實現http客戶端模塊
  • 實現cookies
  • 實現dns解析與緩存
  • 實現ssl(支持openssl, polarssl, mbedtls)
  • 支持ipv4、ipv6
  • 支持通過協程實現異步模式

數學運算庫

  • 提供各種精度的定點運算支持
  • 提供隨機數生成器

libc庫

  • libc的一個輕量級實現,完全跨平臺,並且針對不同架構進行了優化。
  • 支持大部分字符串、寬字符串操作。
  • 擴展字符串、寬字符串的各種大小寫不敏感操作接口
  • 擴展memset_u16、memset_u32等接口,並對其進行高度優化,尤其適合圖形渲染程序

libm庫

  • libm部分接口的一個輕量級實現,以及對常用系統接口的封裝。(目前只實現了部分,之後有時間會完全實現掉)
  • 擴展部分常用接口,增加對sqrt、log2等常用函數的整數版本計算,進行高度優化,不涉及浮點運算,適合嵌入式環境使用。

object庫

  • 輕量級類apple的CoreFoundation庫,支持object、dictionary、array、string、number、date、data等常用對象,並且可以方便擴展自定義對象的序列化。
  • 支持對xml、json、binary以及apple的plist(xplist/bplist)格式序列化和反序列化。 並且實現自有的binary序列化格式, 針對明文進行了簡單的加密,在不影響性能的前提下,序列化後的大小比bplist節省30%。

平臺庫

  • 提供file、directory、socket、thread、time等常用系統接口
  • 提供atomic、atomic64接口
  • 提供高精度、低精度定時器
  • 提供高性能的線程池操作
  • 提供event、mutex、semaphore、spinlock等事件、互斥、信號量、自旋鎖操作
  • 提供獲取函數堆棧信息的接口,方便調試和錯誤定位
  • 提供跨平臺動態庫加載接口(如果系統支持的話)
  • 提供io輪詢器,針對epoll, poll, select, kqueue進行跨平臺封裝
  • 提供跨平臺上下文切換接口,主要用於協程實現,切換效率非常高

壓縮庫

  • 支持zlib/zlibraw/gzip的壓縮與解壓(需要第三方zlib庫支持)。

字符編碼庫

  • 支持utf8、utf16、gbk、gb2312、uc2、uc4 之間的互相轉碼,並且支持大小端格式。

實用工具庫

  • 實現base64/32編解碼
  • 實現crc32、adler32、md5、sha1等常用hash算法
  • 實現日誌輸出、斷言等輔助調試工具
  • 實現url編解碼
  • 實現位操作相關接口,支持各種數據格式的解析,可以對8bits、16bits、32bits、64bits、float、double以及任意bits的字段進行解析操作,並且同時支持大端、小端和本地端模式,並針對部分操作進行了優化,像static_stream、stream都有相關接口對其進行了封裝,方便在流上進行快速數據解析。
  • 實現swap16、swap32、swap64等位交換操作,並針對各個平臺進行了優化。
  • 實現一些高級的位處理接口,例如:位0的快速統計、前導0和前導1的快速位計數、後導01的快速位計數
  • 實現單例模塊,可以對靜態對象、實例對象進行快速的單例封裝,實現全局線程安全
  • 實現option模塊,對命令行參數進行解析,提供快速方便的命令行選項建立和解析操作,對於寫終端程序還是很有幫助的

正則表達式庫

  • 支持匹配和替換操作
  • 支持全局、多行、大小寫不敏感等模式
  • 使用pcre, pcre2和posix正則庫


分享到:


相關文章: