資料介紹
軟件簡(jiǎn)介
Sogou C++ Workflow 是搜狗公司的 C++ 服務(wù)器引擎,支撐搜狗幾乎所有后端 C++ 在線服務(wù),包括所有搜索服務(wù)、云輸入法與在線廣告等,每日處理超百億請(qǐng)求。這是一個(gè)設(shè)計(jì)輕盈優(yōu)雅的企業(yè)級(jí)程序引擎,可以滿足大多數(shù) C++ 后端開發(fā)需求。
可以使用該項(xiàng)目:
- 快速搭建http服務(wù)器:
#include#include "workflow/WFHttpServer.h" int main() { WFHttpServer server([](WFHttpTask *task) { task->get_resp()->append_output_body("Hello World!"); }); if (server.start(8888) == 0) { // start server on port 8888 getchar(); // press "Enter" to end. server.stop(); } return 0; }
-
作為萬能異步客戶端。目前支持
http
,redis
,mysql
和kafka
協(xié)議。 -
實(shí)現(xiàn)自定義協(xié)議client/server,構(gòu)建自己的RPC系統(tǒng)。
-
搜狗RPC就是以它為基礎(chǔ),作為獨(dú)立項(xiàng)目開源。支持
srpc
,brpc
和thrift
等協(xié)議(benchmark)。
-
搜狗RPC就是以它為基礎(chǔ),作為獨(dú)立項(xiàng)目開源。支持
- 構(gòu)建異步任務(wù)流,支持常用的串并聯(lián),也支持更加復(fù)雜的DAG結(jié)構(gòu)。
- 作為并行編程工具使用。除了網(wǎng)絡(luò)任務(wù),我們也包含計(jì)算任務(wù)的調(diào)度。所有類型的任務(wù)都可以放入同一個(gè)流中。
-
在
Linux
系統(tǒng)下作為文件異步IO工具使用,性能超過任何標(biāo)準(zhǔn)調(diào)用。磁盤IO也是一種任務(wù)。 - 實(shí)現(xiàn)任何計(jì)算與通訊關(guān)系非常復(fù)雜的高性能高并發(fā)的后端服務(wù)。
-
構(gòu)建服務(wù)網(wǎng)格(service mesh)系統(tǒng)。
- 項(xiàng)目?jī)?nèi)置服務(wù)治理與負(fù)載均衡等功能。
編譯和運(yùn)行環(huán)境
-
項(xiàng)目支持
Linux
,macOS
,Windows
等操作系統(tǒng)。-
Windows
版暫時(shí)以獨(dú)立branch發(fā)布,使用iocp
實(shí)現(xiàn)異步網(wǎng)絡(luò)。用戶接口與Linux
版一致。
-
-
支持所有CPU平臺(tái),包括32或64位
x86
處理器,大端或小端arm
處理器。 -
需要依賴于
OpenSSL
,推薦OpenSSL 1.1
及以上版本。 -
項(xiàng)目使用了
C++11
標(biāo)準(zhǔn),需要用支持C++11
的編譯器編譯。但不依賴boost
或asio
。 -
項(xiàng)目無其它依賴,但是包含了
lz4
,zstd
和snappy
幾個(gè)壓縮庫的無改動(dòng)源代碼(kafka
協(xié)議需要)。
系統(tǒng)設(shè)計(jì)特點(diǎn)
典型后端服務(wù)器由以下三個(gè)部分組成,并且完全獨(dú)立開發(fā)。
-
協(xié)議
- 大多數(shù)情況下,用戶使用的是內(nèi)置的通用網(wǎng)絡(luò)協(xié)議,例如http,redis或各種rpc。
- 用戶可以方便的自定義網(wǎng)絡(luò)協(xié)議,只需提供序列化和反序列化函數(shù),就可以定義出自己的client/server。
-
算法
-
在 Sogou C++ Workflow 的設(shè)計(jì)里,算法是與協(xié)議對(duì)稱的概念。
- 如果說協(xié)議的調(diào)用是rpc,算法的調(diào)用就是一次apc(Async Procedure Call)。
- 提供了一些通用算法,例如sort,merge,psort,reduce,可以直接使用。
- 與自定義協(xié)議相比,自定義算法的使用要常見得多。任何一次邊界清晰的復(fù)雜計(jì)算,都應(yīng)該包裝成算法。
-
在 Sogou C++ Workflow 的設(shè)計(jì)里,算法是與協(xié)議對(duì)稱的概念。
-
任務(wù)流
- 任務(wù)流就是實(shí)際的業(yè)務(wù)邏輯,就是把開發(fā)好的協(xié)議與算法放在流程圖里使用起來。
- 典型的任務(wù)流是一個(gè)閉合的串并聯(lián)圖。復(fù)雜的業(yè)務(wù)邏輯,可能是一個(gè)非閉合的DAG。
- 任務(wù)流圖可以直接構(gòu)建,也可以根據(jù)每一步的結(jié)果動(dòng)態(tài)生成。所有任務(wù)都是異步執(zhí)行的。
基礎(chǔ)任務(wù),任務(wù)工廠與復(fù)合任務(wù)
- 系統(tǒng)中包含六種基礎(chǔ)任務(wù):通訊,文件IO,CPU,GPU,定時(shí)器,計(jì)數(shù)器。
-
一切任務(wù)都由任務(wù)工廠產(chǎn)生,并且在callback之后自動(dòng)回收。
- server任務(wù)是一種特殊的通訊任務(wù),由框架調(diào)用任務(wù)工廠產(chǎn)生,通過process函數(shù)交給用戶。
- 大多數(shù)情況下,用戶通過任務(wù)工廠產(chǎn)生的任務(wù),都是一個(gè)復(fù)合任務(wù),但用戶并不感知。
異步性和基于C++11 std::function
的封裝
- 不是基于用戶態(tài)協(xié)程。使用者需要知道自己在寫異步程序。
-
一切調(diào)用都是異步執(zhí)行,幾乎不存在占著線程等待的操作。
- 雖然我們也提供一些便利的半同步接口,但并不是核心的功能。
-
盡量避免派生,以
std::function
封裝用戶行為,包括:- 任何任務(wù)的callback。
-
任何server的process。符合
FaaS
(Function as a Service)思想。 -
一個(gè)算法的實(shí)現(xiàn),簡(jiǎn)單來講也是一個(gè)
std::function
。但算法也可以用派生實(shí)現(xiàn)。
內(nèi)存回收機(jī)制
- 任何任務(wù)都會(huì)在callback之后被自動(dòng)內(nèi)存回收。如果創(chuàng)建的任務(wù)不想運(yùn)行,則需要通過dismiss方法釋放。
-
任務(wù)中的數(shù)據(jù),例如網(wǎng)絡(luò)請(qǐng)求的resp,也會(huì)隨著任務(wù)被回收。此時(shí)用戶可通過
std::move()
把需要的數(shù)據(jù)移走。 - SeriesWork和ParallelWork是兩種框架對(duì)象,同樣在callback之后被回收。
-
項(xiàng)目中不使用
std::shared_ptr
來管理內(nèi)存。
- C和C++實(shí)物精選《C專家編程》 0次下載
- C和C++經(jīng)典著作《C和指針》 0次下載
- C和C++經(jīng)典著作-C專家編程.PDF 0次下載
- 基于C++和SCPI的功率傳感器自動(dòng)校準(zhǔn)軟件 22次下載
- C++開源庫的詳細(xì)資料合集免費(fèi)下載
- C++的開源庫大全詳細(xì)資料說明
- C++程序設(shè)計(jì)教程之C++的初步知識(shí)的詳細(xì)資料說明 31次下載
- Visual C++教程之C++的基礎(chǔ)知識(shí)介紹 9次下載
- 如何從C轉(zhuǎn)向C++ Effective C++ PDF中文版教材免費(fèi)下載 0次下載
- VISUAL C++教程之VISUAL C++的安裝和使用方法 19次下載
- 如何提高c和c++的安全編程能力?《C和C++安全編碼》帶你詳細(xì)學(xué)習(xí) 0次下載
- C++C/C++程序設(shè)計(jì)教程_C/C++概述 0次下載
- C++簡(jiǎn)介 ppt
- C++課件 0次下載
- c++程序設(shè)計(jì)教程
- C++中實(shí)現(xiàn)類似instanceof的方法 631次閱讀
- vb語言和c++語言的區(qū)別 2431次閱讀
- C++簡(jiǎn)史:C++是如何開始的 637次閱讀
- C語言和C++中那些不同的地方 986次閱讀
- 如何把C++程序改寫成C語言 3392次閱讀
- C與C++混合編程是什么 1744次閱讀
- C++可移植性及多線程 1028次閱讀
- C++項(xiàng)目常見的命名規(guī)范 2118次閱讀
- C++語言的發(fā)展 617次閱讀
- C/C++基礎(chǔ)知識(shí)匯總 2438次閱讀
- C++:引用的使用場(chǎng)景 4092次閱讀
- 圖文詳解:C++的輸出輸入 3401次閱讀
- C++封裝:this指針 3492次閱讀
- C++到底適不適合桌面軟件開發(fā)C++的應(yīng)用方向和發(fā)展分析 1.8w次閱讀
- C/C++/OpenCL 應(yīng)用編譯的SDSoC開發(fā) 2229次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論