锘??xml version="1.0" encoding="utf-8" standalone="yes"?> https://github.com/yangsf5/claw-gse/blob/master/src/claw/gse/top_n.h 涓轟簡(jiǎn)鍙淮鎶や竴浠戒唬鐮侊紝鍑嗗灝嗕箣鍓嶇敤浜巗hared memory鐨勭粨鏋勮漿鍖栦負(fù)protobuf錛岀劧鍚庝袱澶勯兘鐢ㄨ繖涓猵rotobuf銆?/p> 鎼炰簡(jiǎn)涓浼?xì)鍎垮Q屾墠鎯寵搗shared memory閲屽彧閫傚悎瀛樺畾闀跨殑闈炴寚閽堢粨鏋勩?/p> 姹楋紝榪欎釜鍑犲勾鍓嶅氨緇忓巻榪囷紝閭d釜鏃跺欐槸瀛︾敓鏃朵唬鍋氫簲瀛愭涓栫晫鐨勬椂鍊欙紝璨屼技鏄兂寰shared memory閲屽瓨鏀緎td::map銆?/p> 褰撴椂姘村鉤澶綆錛屾姤閿欎簡(jiǎn)灝辨斁寮冧簡(jiǎn)stl鐨勫鍣紝鍐欎簺浜?jiǎn)涓涓煩鐨劸l撴瀯浣撱?/p> 榪欐灝遍『渚挎悳涓嬪綋騫撮偅涓棶棰樼殑瑙e喅鏂規(guī)硶銆傛壘鍒頒釜璇寸殑鎸哄ソ鐨勶細(xì)http://www.cnblogs.com/fullsail/archive/2013/01/20/2868898.html銆?/p> 澶ф剰灝辨槸錛宻tl閲屽鍣ㄤ細(xì)鍔ㄦ佸垎閰嶅唴瀛橈紝鑰屼笖new鐨勪笢瑗垮湪鑷繁鐨勮繘紼嬬┖闂撮噷錛屽埆鐨勮繘紼嬭闂椂蹇呯劧鏄釜涓嶅鐨勬寚閽堛傞渶瑕佸皢stl鐨勫垎閰嶅櫒瀹氬埗涓轟粠鍏變韓鍐呭瓨閲屽垎閰嶇┖闂達(dá)紝鎴栬呭叾浠栧嚑涓摼鎺ラ噷鎻愬埌鐨勬柟娉曘?/p> 鍥炲埌鎴戠幇鍦ㄩ亣鍒扮殑protobuf榪欎釜闂錛宲rotobuf閲屾湁浜涘repeated鎴栬卻tring絳変細(xì)鍔ㄦ乶ew錛岃繖涓鏋滃仛鍐呭瓨鍒嗛厤鐨勫畾鍒訛紝榪樺緱閲嶆敼protobuf鐨勪唬鐮侊紝澶嶆潅搴︽瘮杈冮珮銆?/p> 鍔犱笂欏圭洰閲岀殑榪欏崟涓崗璁牸寮忓埗瀹氱殑闇姹傚彧鏄復(fù)鏃剁殑錛屽氨鏇存病蹇呰浜?jiǎn)銆傛渶緇堟斁寮僷rotobuf緇撴瀯鐩存帴鏄犲皠鍒板叡浜唴瀛樼殑浼佸浘銆?/p> vs鑷韓甯︾殑/GS鍙槸鍦ㄦ爤婧㈠嚭鏃惰功涓紓甯革紝涓嶄細(xì)緇欎綘瀹氫綅宕╁湪鍝傛墍浠ユ壘浜?jiǎn)浼?xì)鍎垮埆鐨勫伐鍏鳳紝boundschecker榪樻病鎵懼埌涓嬬殑鍦版柟錛孖BM鐨刾urify璺ㄥ鉤鍙頒絾鏄敹璐癸紝鍙﹀鍏嶈垂濂界敤鐨勫氨鏄痩inux涓嬬殑valgrind浜?jiǎn)銆傝繖鍑犵鍐呭瓨?gòu)個(gè)鏌ュ伐鍏烽兘鍙互媯(gè)鏌ュ唴瀛樻硠闇插拰瓚婄晫涔嬬被鐨勩傚彧鏄」鐩幇鍦ㄨ刀榪涘害錛宭inux騫沖彴鐨勭紪璇戣繕娌℃椂闂磋В鍐籌紝鍐呭瓨緇熶竴媯(gè)鏌ュ氨浣滅艦銆?/p> 寮濮嬬湅鐪嬭兘涓嶈兘鏌ump銆俤ump涓嶆槸鍘熺敓鐨刣mp鑰屾槸鍘嗗彶浠g爜閲岄噸瀛樹(shù)負(fù)鍒殑浜?jiǎn)銆倂c璋冭瘯涓嶅緢鐔熺粌錛屽氨绱㈡ф妸閲嶅瓨dump閭e潡鍎跨殑catch緇欏共鎺変簡(jiǎn)銆傜洿鎺ヨ緙栬瘧鍣ㄥ穿鍒頒唬鐮佸潡鍎垮啀鐪嬬湅鑳戒笉鑳界湅鍑轟粈涔堥棶棰樸?/p> 宕╁仠鍒板叿浣撲唬鐮佽浜?jiǎn)锛屽緢鎯婂枩锛岃刀绱х湅鐪嬪悇鍙橀噺鍐呭瓨鐘跺喌锛岄棶棰樻暟缁勬槸涓涓寚閽堟暟緇勶紝榪欐鎯婂枩鐨勫彂鐜頒箣鍓嶅崟姝ョ殑閭d釜涓嬫爣瀵瑰簲鍦ㄦ暟緇勫厓绱犳寚閽堣窡鍒殑涓嶄竴鏍鳳紝涓?xcdcdcdcd錛岀‘璁や簡(jiǎn)涓嬩負(fù)vc涓嬩負(fù)鏈垵濮嬪寲鐨勬寚閽堛?/p> 榪欐牱灝卞ソ鏌ヤ簡(jiǎn)錛岄棶棰樺畾浣嶅埌浜?jiǎn)锛屽悗杈圭殑灏变笉鍟板棪浜?jiǎn)銆?/p> 鏈緇堥棶棰樻槸錛屽悓浜嬬粰涓涓被鏂板姞浜?jiǎn)鍑犱釜鎸囬拡鎴愬憳锛屼絾鏄瘶q欏嚑涓病鏈塶ew鍑烘潵鍒濆鍖栦箣銆傚攭……鍙兘鎰熷徆涓嬫晱鎹峰紑鍙戦偅鏈功閲岃鐨勶紝鏋舵瀯甯堣鍙傚姞緙栫爜錛屾垜瑙夊緱瑕佸姞鐐瑰効錛屽氨鏄灦鏋勫笀瑕佸弬涓庣紪鐮佽繕瑕佸弬涓庢祴璇曡皟璇曡嚜宸辯殑浠g爜銆?/p> 涓寮濮嬫尯鎯婂錛岃繃浼?xì)鍎繛鎯冲垘图尵c葷殑鏋勯犲嚱鏁伴噷浼?xì)琚~栬瘧鍣ㄦ彃鍏ヤ竴浜涙病鏈夋樉紺哄垵濮嬪寲鐨勬垚鍛樼殑鍒濆鍖栬鍙ャ傛墍浠ヨF10鏀逛負(fù)F11璋冭瘯銆?/p> 鎱㈡參浼間箮鎵懼埌闂鍑芥暟浜?jiǎn)锛屾鍑嗗鍐嶉噸寮璋冭瘯緇х畫(huà)璺熸椂錛屾湅鍙嬭〃紺烘寜涓媣c鐨勬殏鍋滈敭錛岀収鍋氾紝“鎴戞摝——”涔嬪悗鏄磭鎷滅殑鍙f按銆?/p> 闂鍘熷洜錛歸hile鐨勯鍑哄彉閲忔病鏈夎嚜澧烇紝瀵艱嚧姝誨驚鐜簡(jiǎn)銆?br /> 鎬葷粨錛?/p> 紼嬪簭鍗″湪鍝効錛屽熀鏈氨鏄寰幆鎴栬呮閿併傛寰幆鐨勫彂鐜幫紝鍙互鐪媍pu鍗犵敤鏉ヤ綈璇併傞棶棰樺畾浣嶏紝鏆傚仠璋冭瘯銆?/p> 姝婚攣鐨勫畾浣嶏紝鍙互鐪媠tack錛岄噷杈瑰簲璇ユ湁wait涔嬬被鐨勩?/p> 涓銆佺畝浠?/p> 榪欎釜欏圭洰鍒氳搗姝ワ紝灝嗘潵鏈夊彲鑳戒細(xì)婕斿彉?shù)负鍏徃鐨勬湇鍔″櫒妗嗘灦銆傚崥瀹㈤噷鏆備笖縐板懠涓篨欏圭洰銆?/p> 璇█涓篶++錛屼箣鍚庡皢姝ゆ湇鍔″櫒鐨勮璁℃紨鍙樺敖閲忚褰曚笅鏉ワ紝涓轟竴涓郴鍒楋紝浠?#8220;X欏圭洰C++鏈嶅姟鍣?#8221;涓虹粺涓鏍囬寮澶淬?/p> 浜屻佹灦鏋勮璁?/p> 錛堜竴錛夊榪涚▼閫氫俊鏂規(guī) zeromq 錛堜簩錛夊崗璁柟妗?/p> protobuf 錛堜笁錛夊瓨鍌?/p> redis 錛堝洓錛夎剼鏈?/p> luaplus 錛堜簲錛夋棩蹇?/p> glog 涓夈佽嚜鍔ㄦ瀯寤洪儴緗?/p> 鑷姩鏋勫緩絳変負(fù)鏁忔嵎寮鍙戞彁渚涗繚闅溿?/p> 涔嬪墠緇忓巻鐨勯偅浜涢」鐩紙鍏朵腑鍖呮嫭涓氬唴姣旇緝鏈夊悕鐨?涓ぇ鍨嬮」鐩級(jí)鍦ㄨ嚜鍔ㄦ瀯寤洪儴緗叉柟闈㈠熀鏈負(fù)0錛屽紑鍙戞晥鐜囦笉楂橈紝榪欐鏂伴」鐩噯澶囦粠涓寮濮嬪氨鍋氳繖鏂歸潰鐨勫噯澶囥?/p> 錛堜竴錛夊崟嫻?/p> 鍗曟祴妗嗘灦鑰冭檻google鐨刧test銆?/p> 褰撳伐紼嬪ぇ浜?jiǎn)锛屽崟鏈壕~栬瘧閫熷害浼?xì)寰堟參銆傞緙栬瘧澶翠細(xì)鎻愰珮寰堝ぇ鐨勯熷害銆傜浉鍏沖師鐞嗚繖閲屼笉璧樿堪錛岀綉涓婂緢澶氥傦紙鎴栬呰佸か鏈夌┖鐨勬椂鍊欏啀琛ュ厖錛?/p> 浜屻乧make璁劇疆gcc鐨勯緙栬瘧澶?/p> 涓寮濮媑oogle鍒頒竴涓浗鍐呭悓琛屽啓鐨刢make瀹忥紝鐢ㄤ簡(jiǎn)涓嬶紝璨屼技涓嶆槸寰堝ソ鐢ㄣ傚彟澶栦綔鑰呬篃琛ㄧず榪樻槸鏈塨ug銆?/p> 鍚庢潵鎵懼埌cotire銆傜洰鍓嶄嬌鐢ㄨ壇濂姐?/p> 涓夈乧otire錛坈ompile time reducer錛?/p> 欏圭洰鍦板潃https://github.com/sakra/cotire銆傚叿浣撲嬌鐢ㄦ柟寮廹ithub閲屽搴旈」鐩富欏靛凡緇忓啓鐨勫緢娓呮浜?jiǎn)锛堜富椤祄an鐪嬩笉鏄庣櫧鐨勫彲浠ュ幓鐪嬩粬鐨剆rc閲岄偅涓緥瀛愶級(jí)錛岃繖閲屽彧鍋氫笅蹇嵎澶囧繕銆?/p> 姝ラ錛?/p> 1. clone榪欎釜git銆?/p> 2. 灝哻otire閲岀殑CMake/cotire.cmake鎷峰埌鍜變滑鑷繁宸ョ▼鐨勯《灞侰MakeLists.txt鍚岀駭鐩綍涓嬨?/p> 3. 寰榪欎釜欏跺眰CMakeLists.txt閲岃緗竴涓彉閲忓茍include錛?/p> set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake") include(cotire) 4. 鍦ㄥ叿浣撶殑CMakeLists.txt鐨刟dd_executable鍚庤竟鍐峜otire涓嬶紝濡傦細(xì) add_executable(MyExecutable ${MyExecutableSources}) 5. 涓婅竟鏄嚜鍔ㄥ鎵鵑緙栬瘧澶達(dá)紝涔熷彲浠ヨ嚜宸辮緗紝渚嬪鎴戜滑浠巚c璺ㄥ鉤鍙拌繃鏉ョ殑欏圭洰錛屾樉紺鴻緗畇tdafx.h錛屽彧鐢ㄥ湪cotire鍓嶈竟璁劇疆涓嬪嵆鍙細(xì) set_target_properties(MyExecutable PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "stdafx.h") count璁板綍str鏁扮粍鐨勫ぇ灝忋備笉涓瀹氭槸char綾誨瀷錛屽彲浠ョ敤瀹忔潵浼犻掔浉搴斿弬鏁扮被鍨嬨?br />娉ㄦ剰鐨勫湴鏂癸細(xì)鍦ㄧ敵璇風(fēng)┖闂存椂瑕佹牴鎹甤ount鐨勫兼潵澶氱敵璇穝tr鐨勭┖闂淬?/p>
欏圭洰閲宻hared memory瀛樻斁鐨勬暟鎹粨鏋勶紝鐜板湪闇瑕佸皢鍏跺悓鏃剁敤浜巗erver涓巆lient涔嬮棿鐨勭浉搴旀暟鎹氦浜掋俿erver涓巆lient涔嬪墠鐨勫崗璁牸寮忎負(fù)protobuf銆?/p>
鍗曟鍒板穿婧冨湴鐐癸紝鏈夋暟緇勫彇鏁版嵁鍜屾嫹璐濇搷浣滐紝鐚滄祴鏁扮粍瓚婄晫瀵艱嚧鐨勬爤婧㈠嚭銆傚氨寮濮嬫壘瓚婄晫媯(gè)鏌ュ伐鍏楓?/p>
鍒濇璋冭瘯錛屽彂鐜版煇涓被鐨勬瀯閫犲嚱鏁拌繘浜?jiǎn)锛屼絾鏄湪宸﹁姳鎷忥L(fēng)殑鍦版柟灝卞崱浣忎簡(jiǎn)錛屾病鏈夊線鍚庤蛋銆?/p>
涓銆侀緙栬瘧澶?/p>
target_link_libraries(MyExecutable ${MyExecutableLibraries})
cotire(MyExecutable)
cotire(MyExecutable)
灝界TCP瀹㈡埛绔緗甌CP_NODELAY,鏈嶅姟鍣ㄤ粛欏昏鍒癊AGAIN鎵嶇畻瀹屾垚涓涓狤POLLIN浜嬩歡銆?br />
涓寮濮嬩互涓哄鎴風(fēng)璁劇疆浜?jiǎn)TCP_NODELAY閫夐」灝辮〃紺烘瘡涓嬈″彂鍖呴兘浼?xì)瑙﹀彂鏂颁簨錃g錛?br />嫻嬭瘯緇撴灉涓嶆槸榪欐牱鐨勩?br />寰堝鏄撶悊瑙o紝TCP_NODELAY鍙槸涓嶈搴曞眰鎷煎寘錛屼絾鏄湇鍔″櫒绔疄闄呮斁鍒扮紦鍐插尯鐨勬暟鎹紝榪樻槸鏉ヤ簡(jiǎn)灝辨斁緙撳啿鍖猴紝
鑰孍POLL鍙搴旂敤灞傘?img src ="http://www.shnenglu.com/yangsf5/aggbug/81545.html" width = "1" height = "1" />
1銆乴isten fd錛屾湁鏂拌繛鎺ヨ姹傦紝瑙﹀彂EPOLLIN銆?br />2銆佸绔彂閫佹櫘閫氭暟鎹紝瑙﹀彂EPOLLIN銆?br />3銆佸甫澶栨暟鎹紝鍙Е鍙慐POLLPRI銆?br />4銆佸绔甯稿叧闂紙紼嬪簭閲宑lose()錛宻hell涓媖ill鎴朿tr+c錛夛紝瑙﹀彂EPOLLIN鍜孍POLLRDHUP錛屼絾鏄笉瑙﹀彂EPOLLERR鍜孍POLLHUP銆?br /> 鍏充簬榪欑偣錛屼互鍓嶄竴鐩翠互涓轟細(xì)瑙﹀彂EPOLLERR鎴栬匛POLLHUP銆?br /> 鍐峬an epoll_ctl鐪嬩笅鍚庝袱涓簨浠剁殑璇存槑錛岃繖涓や釜搴旇鏄湰绔紙server绔級(jí)鍑洪敊鎵嶈Е鍙戠殑銆?br />5銆佸绔紓甯告柇寮榪炴帴錛堝彧嫻嬩簡(jiǎn)鎷旂綉綰匡級(jí)錛屾病瑙﹀彂浠諱綍浜嬩歡銆?br />
闄刴an錛?br />
EPOLLIN
The associated file is available for read(2) operations.
EPOLLOUT
The associated file is available for write(2) operations.
EPOLLRDHUP
Stream socket peer closed connection, or shut down writing half
of connection. (This flag is especially useful for writing sim-
ple code to detect peer shutdown when using Edge Triggered moni-
toring.)
EPOLLPRI
There is urgent data available for read(2) operations.
EPOLLERR
Error condition happened on the associated file descriptor.
epoll_wait(2) will always wait for this event; it is not neces-
sary to set it in events.
EPOLLHUP
Hang up happened on the associated file descriptor.
epoll_wait(2) will always wait for this event; it is not neces-
sary to set it in events.
EPOLLET
Sets the Edge Triggered behavior for the associated file
descriptor. The default behavior for epoll is Level Triggered.
See epoll(7) for more detailed information about Edge and Level
Triggered event distribution architectures.
EPOLLONESHOT (since Linux 2.6.2)
Sets the one-shot behavior for the associated file descriptor.
This means that after an event is pulled out with epoll_wait(2)
the associated file descriptor is internally disabled and no
other events will be reported by the epoll interface. The user
must call epoll_ctl() with EPOLL_CTL_MOD to re-enable the file
descriptor with a new event mask.
鏈潵C99鏀寔鍙橀暱鏁扮粍浜?jiǎn)锛屼絾鏄垜浠瑱骞鐩l勫鎴風(fēng)鐨勫紑鍙戜漢鍛樼敤鐨勬槸vs2005錛岃孧S鐨勮繖涓張涓嶆敮鎸丆99銆傛病鍔炴硶錛屾垜浠湇鍔″櫒绔緱鍏煎浠栦滑銆?br />鎵浠ュ彉闀跨粨鏋勪綋鍙兘榪欐牱浜?jiǎn)锛?xì)struct _abc
{
int count;
char str[0];
};