re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(一)[未登錄] cppexplore 2015-06-02 15:22
@小星星 這個(gè)函數(shù)本身并不知道它被用于進(jìn)入和退出的地方,他只是處理事件
re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(二)[未登錄] cppexplore 2014-11-05 10:15
@sohu 你好!你說的不錯,是“狀態(tài)”的層次,對同一個(gè)狀態(tài)機(jī),更容易符合人的正常思維。
這個(gè)理論來自于實(shí)踐吧,先考慮最終需要,再進(jìn)行實(shí)現(xiàn)。
你提出的基于狀態(tài)機(jī)的層次很不錯,既然想到了這扇門,打開只是實(shí)現(xiàn)上的問題,這比“狀態(tài)”層面的有更高抽象,簡單想想,非常不錯
這個(gè)理論來自于實(shí)踐吧,先考慮最終需要,再進(jìn)行實(shí)現(xiàn)。
你提出的基于狀態(tài)機(jī)的層次很不錯,既然想到了這扇門,打開只是實(shí)現(xiàn)上的問題,這比“狀態(tài)”層面的有更高抽象,簡單想想,非常不錯
re: 【原創(chuàng)】技術(shù)系列之 定時(shí)器(一)[未登錄] cppexplore 2014-10-23 14:37
@rqf
說實(shí)話,本文本質(zhì)很垃圾
說實(shí)話,本文本質(zhì)很垃圾
re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(一)[未登錄] cppexplore 2014-10-23 14:37
@zhaoyuexian
順其自然,有需要的時(shí)候自然會用到
順其自然,有需要的時(shí)候自然會用到
re: 自己動手寫腳本語言[未登錄] cppexplore 2013-09-04 12:35
不錯, 學(xué)習(xí)
re: 【原創(chuàng)】技術(shù)系列之 定時(shí)器(一) cppexplore 2012-12-23 09:38
當(dāng)年寫的這么一個(gè)垃圾實(shí)現(xiàn), 大家就不要再繼續(xù)留言了 呵呵
re: 因?yàn)閷W⑺詫I(yè), EverEdit 2.0版本發(fā)布了[未登錄] cppexplore 2012-06-16 21:58
支持!
re: 準(zhǔn)備發(fā)布1.0[未登錄] cppexplore 2012-02-06 18:25
期待
re: 敢問路在何方? 一個(gè)老程序員的真情告白![未登錄] cppexplore 2012-01-01 10:29
好象有 助聽器 的東西存在, 樓主可以試試.
re: 敢問路在何方? 一個(gè)老程序員的真情告白![未登錄] cppexplore 2011-12-30 18:30
樓上不淡定了.
頂樓主.
頂樓主.
re: 【原創(chuàng)】技術(shù)系列之 內(nèi)存管理(三) cppexplore 2011-12-16 12:21
@chipset
站在"造輪子"角度 / "使用輪子" 角度 /"選輪子"角度 看到的東西各有些不同.
站在"造輪子"角度 / "使用輪子" 角度 /"選輪子"角度 看到的東西各有些不同.
re: 【原創(chuàng)】技術(shù)系列之 內(nèi)存管理(三)[未登錄] cppexplore 2011-08-10 12:30
@sa
原因: 1) 和linklist相比更節(jié)省內(nèi)存 2)和linklist相比,申請/歸還內(nèi)存更快
原因: 1) 和linklist相比更節(jié)省內(nèi)存 2)和linklist相比,申請/歸還內(nèi)存更快
re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(一) cppexplore 2011-07-19 12:42
@nothing
設(shè)置錯誤狀態(tài). 任何狀態(tài)下增加錯誤消息處理, 跳轉(zhuǎn)到錯誤狀態(tài). 和普通狀態(tài)/普通事件同質(zhì)
設(shè)置錯誤狀態(tài). 任何狀態(tài)下增加錯誤消息處理, 跳轉(zhuǎn)到錯誤狀態(tài). 和普通狀態(tài)/普通事件同質(zhì)
re: 《我的第一本C++書》迷你書——看圖學(xué)C++免費(fèi)下載 cppexplore 2011-07-19 12:31
書沒賣出去
到是要把cppblog給毀了
到是要把cppblog給毀了
re: 并列的選擇:switch語句 cppexplore 2011-07-16 10:41
兄弟好, 我覺得在cppblog上推銷不如在csdn上有效果
re: 【原創(chuàng)】高性能服務(wù)器本質(zhì)論 cppexplore 2011-06-04 13:41
@shenkai
等有時(shí)間了 寫點(diǎn)近2年更精彩的內(nèi)容
謝謝捧場
等有時(shí)間了 寫點(diǎn)近2年更精彩的內(nèi)容
謝謝捧場
re: 【原創(chuàng)】技術(shù)系列之 必備外圍功能-log[未登錄] cppexplore 2011-06-04 13:31
2年前對日志完善了不少,以前的錯誤引導(dǎo)更正下
@田伯光
多進(jìn)程打印問題:
不可以多進(jìn)程打印, 除了寫不能保證原子性,還有文件更換時(shí)的問題.
共享內(nèi)存共享log對象可以, 這樣還不如各自打印獨(dú)立文件, 同時(shí)使用遠(yuǎn)程syslog方式統(tǒng)一打印到遠(yuǎn)程(需要自己實(shí)現(xiàn)appender)
動態(tài)生效問題:
可使用ConfigureAndWatchThread類達(dá)到目的, 同時(shí)log4cplus中有不少bug,使用這個(gè)功能時(shí) 要修改不少地方.
@sashion
上上個(gè)我的留言里說錯了很多地方.
log4cplus沒有提供延遲輸出的策略, 新的維護(hù)者有計(jì)劃增加異步,還沒增加.實(shí)現(xiàn)異步延遲打印,需要自己進(jìn)一步封裝實(shí)現(xiàn).
"能在core dump 之前把所有的對象都dump到日志中嗎?"
不能. 因log4cplus沒有提供延遲輸出的策略, 日志同步打印,也不存在這個(gè)問題. 若自己實(shí)現(xiàn)異步延遲輸出的話, 延遲輸出的部分可以使用共享內(nèi)存,另可捕獲信號做一定補(bǔ)償.
@田伯光
多進(jìn)程打印問題:
不可以多進(jìn)程打印, 除了寫不能保證原子性,還有文件更換時(shí)的問題.
共享內(nèi)存共享log對象可以, 這樣還不如各自打印獨(dú)立文件, 同時(shí)使用遠(yuǎn)程syslog方式統(tǒng)一打印到遠(yuǎn)程(需要自己實(shí)現(xiàn)appender)
動態(tài)生效問題:
可使用ConfigureAndWatchThread類達(dá)到目的, 同時(shí)log4cplus中有不少bug,使用這個(gè)功能時(shí) 要修改不少地方.
@sashion
上上個(gè)我的留言里說錯了很多地方.
log4cplus沒有提供延遲輸出的策略, 新的維護(hù)者有計(jì)劃增加異步,還沒增加.實(shí)現(xiàn)異步延遲打印,需要自己進(jìn)一步封裝實(shí)現(xiàn).
"能在core dump 之前把所有的對象都dump到日志中嗎?"
不能. 因log4cplus沒有提供延遲輸出的策略, 日志同步打印,也不存在這個(gè)問題. 若自己實(shí)現(xiàn)異步延遲輸出的話, 延遲輸出的部分可以使用共享內(nèi)存,另可捕獲信號做一定補(bǔ)償.
re: 【原創(chuàng)】從同步互斥機(jī)制到智能指針使用成本 cppexplore 2011-03-28 12:45
@egmkang
:)
:)
re: 2009-2010小結(jié)(五)離職始末[未登錄] cppexplore 2011-01-27 21:39
不多說了 頂
新年新氣象,前途一定更美好!
新年新氣象,前途一定更美好!
re: 編輯器0.0.1版(原MegaxEdit)兼征名,歡迎噴![未登錄] cppexplore 2011-01-01 13:40
支持!!!
re: 【原創(chuàng)】高性能服務(wù)器本質(zhì)論 [未登錄] cppexplore 2010-12-20 09:22
@Benjamin
有提升. 一個(gè)機(jī)器跑,和多個(gè)機(jī)器跑 當(dāng)然是不一樣的.
blog 里很多東西都是簡單概述, 可以找其他有關(guān)協(xié)程的文章看看 :)
有提升. 一個(gè)機(jī)器跑,和多個(gè)機(jī)器跑 當(dāng)然是不一樣的.
blog 里很多東西都是簡單概述, 可以找其他有關(guān)協(xié)程的文章看看 :)
re: 我的網(wǎng)絡(luò)模塊設(shè)計(jì)第二版 cppexplore 2010-10-04 09:28
頂貼支持!
re: 【原創(chuàng)】從同步互斥機(jī)制到智能指針使用成本 [未登錄] cppexplore 2010-09-04 11:16
@金慶
線程之間傳遞指針,基本就是傳遞智能指針。
傳遞id代替就是為了避免智能指針
線程之間傳遞指針,基本就是傳遞智能指針。
傳遞id代替就是為了避免智能指針
re: 發(fā)布一個(gè)基于 Reactor 模式的 C++ 網(wǎng)絡(luò)庫[未登錄] cppexplore 2010-09-03 09:10
@chaogu
linux的線程調(diào)度比windows的差, 有資料表明,windows上線程的調(diào)度切換是linux上的1/30大概.
另linux可以把進(jìn)程和cpu綁定,而線程:低內(nèi)核的linux則沒有相關(guān)函數(shù), 2.6小版本內(nèi)核有相關(guān)函數(shù),但綁定不成功, 只有最新的linux內(nèi)核才可以。
linux的線程調(diào)度比windows的差, 有資料表明,windows上線程的調(diào)度切換是linux上的1/30大概.
另linux可以把進(jìn)程和cpu綁定,而線程:低內(nèi)核的linux則沒有相關(guān)函數(shù), 2.6小版本內(nèi)核有相關(guān)函數(shù),但綁定不成功, 只有最新的linux內(nèi)核才可以。
re: 一砣屎自述 cppexplore 2010-08-29 13:45
兄弟,你瘋了。
re: 七律一首,詠程序員 cppexplore 2010-08-19 09:02
跟隨高人頂帖
re: C++的流設(shè)計(jì)很糟糕[未登錄] cppexplore 2010-07-06 14:29
@cui
......................驚人的一致............
......................驚人的一致............
re: C++的流設(shè)計(jì)很糟糕[未登錄] cppexplore 2010-07-06 14:28
兄弟, 你走遠(yuǎn)了吧. log4cpp的流使用方式就很好啊,類似如此:
#define SLOG(Level,Event) \
do{ \
std::ostringstream _SLOG_BUF_INTERNAL_; \
_SLOG_BUF_INTERNAL_<<Event; \
printf_log(Level,_SLOG_BUF_INTERNAL_.str().c_str()); \
}while(0)
#define SLOG(Level,Event) \
do{ \
std::ostringstream _SLOG_BUF_INTERNAL_; \
_SLOG_BUF_INTERNAL_<<Event; \
printf_log(Level,_SLOG_BUF_INTERNAL_.str().c_str()); \
}while(0)
re: 順便發(fā)個(gè)招聘信息 cppexplore 2010-07-02 08:48
請不要發(fā)廣告到首頁, 謝謝配合!
re: 【原創(chuàng)】服務(wù)器技術(shù)系列綜述(二) [未登錄] cppexplore 2010-06-04 12:06
@UustCodeIT
session對象和 網(wǎng)絡(luò)層的connection對象有一定對應(yīng)關(guān)系的
session對象和 網(wǎng)絡(luò)層的connection對象有一定對應(yīng)關(guān)系的
re: 令人氣憤的現(xiàn)象[未登錄] cppexplore 2010-05-28 08:56
博主不要生氣, 平常心看待
我想他也是無意說的.
我想他也是無意說的.
re: 一種線程安全的單例模式實(shí)現(xiàn)方式[未登錄] cppexplore 2010-05-27 08:56
@OnTheWay
c++里的線程安全單例應(yīng)該是典型的雙重檢測.
文中如此實(shí)現(xiàn)的話, 每次調(diào)用GetInstatnce都要涉及到加鎖操作, 估計(jì)沒人愿意調(diào)用.
c++里的線程安全單例應(yīng)該是典型的雙重檢測.
文中如此實(shí)現(xiàn)的話, 每次調(diào)用GetInstatnce都要涉及到加鎖操作, 估計(jì)沒人愿意調(diào)用.
re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(二)[未登錄] cppexplore 2010-05-26 09:36
@種花得花
是錯了. 應(yīng)該先執(zhí)行func,再執(zhí)行狀態(tài)遷移引起的func.
需要為每個(gè)event單獨(dú)配置一個(gè)event func, 當(dāng)然是這個(gè)狀態(tài)對這個(gè)event感興趣的時(shí)候, 對不感興趣的event, 使用改狀態(tài)的default_func就可以了.
如果每個(gè)狀態(tài)只要一個(gè)事件回調(diào), 那說明這個(gè)狀態(tài)只對一個(gè)event感興趣吧(或者你的多個(gè)event應(yīng)該合并成一個(gè)), 這個(gè)時(shí)候基本不需要狀態(tài)機(jī),保存一個(gè)玫舉的狀態(tài)變量就好了, 這是我的一點(diǎn)看法.
是錯了. 應(yīng)該先執(zhí)行func,再執(zhí)行狀態(tài)遷移引起的func.
需要為每個(gè)event單獨(dú)配置一個(gè)event func, 當(dāng)然是這個(gè)狀態(tài)對這個(gè)event感興趣的時(shí)候, 對不感興趣的event, 使用改狀態(tài)的default_func就可以了.
如果每個(gè)狀態(tài)只要一個(gè)事件回調(diào), 那說明這個(gè)狀態(tài)只對一個(gè)event感興趣吧(或者你的多個(gè)event應(yīng)該合并成一個(gè)), 這個(gè)時(shí)候基本不需要狀態(tài)機(jī),保存一個(gè)玫舉的狀態(tài)變量就好了, 這是我的一點(diǎn)看法.
re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(二) cppexplore 2010-05-25 17:50
@種花得花
兄弟看的仔細(xì)啊.
如果event產(chǎn)生了state切換,也應(yīng)該先執(zhí)行對應(yīng)的func, 再執(zhí)行exit func啊.
不太明白你的意思. 不過我實(shí)際用的狀態(tài)機(jī)的確和文章中的都差異很大,呵呵, 除了整理調(diào)試代碼外,最大的修改 就是狀態(tài)切換時(shí), 不馬上切換, 先將狀態(tài)入隊(duì)列,等func執(zhí)行完, 再做實(shí)際的state切換,不知道你說的是不是這里的問題.
兄弟看的仔細(xì)啊.
如果event產(chǎn)生了state切換,也應(yīng)該先執(zhí)行對應(yīng)的func, 再執(zhí)行exit func啊.
不太明白你的意思. 不過我實(shí)際用的狀態(tài)機(jī)的確和文章中的都差異很大,呵呵, 除了整理調(diào)試代碼外,最大的修改 就是狀態(tài)切換時(shí), 不馬上切換, 先將狀態(tài)入隊(duì)列,等func執(zhí)行完, 再做實(shí)際的state切換,不知道你說的是不是這里的問題.
re: 無鎖線程通信(1)[未登錄] cppexplore 2010-05-06 13:25
如果不考慮線程wait和signal的問題,僅僅是讀寫問題,不加鎖可行,我覺得前提是:
(1)只有兩個(gè)線程參與,存在point_r 讀指針和point_w 寫指針 兩個(gè)變量。
(2)只有讀數(shù)據(jù)線程 寫變量point_r , 只有寫數(shù)據(jù)線程 寫變量 point_w 。寫就是一個(gè)變量的寫操作只在一個(gè)線程內(nèi)進(jìn)行,其他線程只讀。
原子性操作不能借助語言層面的volatile實(shí)現(xiàn),必須借助基于硬件的基本原語完成。最近常說的lock_free編程,具體實(shí)現(xiàn)是spin_lock,基于CAS原語實(shí)現(xiàn),是因?yàn)闆]有借助內(nèi)核態(tài)的鎖而著稱。
(1)只有兩個(gè)線程參與,存在point_r 讀指針和point_w 寫指針 兩個(gè)變量。
(2)只有讀數(shù)據(jù)線程 寫變量point_r , 只有寫數(shù)據(jù)線程 寫變量 point_w 。寫就是一個(gè)變量的寫操作只在一個(gè)線程內(nèi)進(jìn)行,其他線程只讀。
原子性操作不能借助語言層面的volatile實(shí)現(xiàn),必須借助基于硬件的基本原語完成。最近常說的lock_free編程,具體實(shí)現(xiàn)是spin_lock,基于CAS原語實(shí)現(xiàn),是因?yàn)闆]有借助內(nèi)核態(tài)的鎖而著稱。
re: FullTuring Coder 〖尋求代碼愛好者伙伴〗 cppexplore 2010-04-28 09:32
支持 留名
過幾天也搞個(gè)海報(bào)出來 呵呵
過幾天也搞個(gè)海報(bào)出來 呵呵
re: 網(wǎng)站架構(gòu)演變體系[未登錄] cppexplore 2010-04-16 18:43
好文!
re: 【原創(chuàng)】服務(wù)器技術(shù)系列綜述(三) [未登錄] cppexplore 2010-04-13 16:48
@zhaojx
很高興你能喜歡我寫的內(nèi)容, :)
很高興你能喜歡我寫的內(nèi)容, :)
re: 【原創(chuàng)】內(nèi)存相關(guān)分享[未登錄] cppexplore 2010-04-02 09:10
@cm
試用了內(nèi)存池嗎? 全局內(nèi)存池的話效果不理想,至少linux下全局的是跑不過dlmalloc的. 據(jù)說windows下很容易跑過它自己的malloc子系統(tǒng)吧, 我沒測試過,呵呵.
試試區(qū)分對象內(nèi)存池和線程內(nèi)存池,觀察服務(wù)器穩(wěn)定并發(fā)能力是否有提高,響應(yīng)時(shí)間是否有稍許改善,cpu利用率是否平穩(wěn)? 觀察下你服務(wù)器在規(guī)格性能下,是cpu高還是iowait高, 看看系統(tǒng)瓶頸在哪里?
試用了內(nèi)存池嗎? 全局內(nèi)存池的話效果不理想,至少linux下全局的是跑不過dlmalloc的. 據(jù)說windows下很容易跑過它自己的malloc子系統(tǒng)吧, 我沒測試過,呵呵.
試試區(qū)分對象內(nèi)存池和線程內(nèi)存池,觀察服務(wù)器穩(wěn)定并發(fā)能力是否有提高,響應(yīng)時(shí)間是否有稍許改善,cpu利用率是否平穩(wěn)? 觀察下你服務(wù)器在規(guī)格性能下,是cpu高還是iowait高, 看看系統(tǒng)瓶頸在哪里?
re: 淺談游戲服務(wù)器-》架構(gòu)上來看(三) [未登錄] cppexplore 2010-02-02 14:11
剛頂錯地方了 呵呵. 好文! 期待博主繼續(xù)
re: 淺談游戲服務(wù)器---功能模塊上來看[未登錄] cppexplore 2010-02-02 14:08
不錯 好文!! 期待博主繼續(xù)
re: 【原創(chuàng)】技術(shù)系列之 定時(shí)器(二) cppexplore 2010-02-01 11:36
@expter
的確不高,呵呵
現(xiàn)在換成線程獨(dú)自的定時(shí)器了,不再加鎖,容器換簡單的multimap了
的確不高,呵呵
現(xiàn)在換成線程獨(dú)自的定時(shí)器了,不再加鎖,容器換簡單的multimap了
re: 【原創(chuàng)】技術(shù)系列之 線程(二)[未登錄] cppexplore 2009-10-30 08:51
@laohu
"盡量避免pthread_mutex進(jìn)入競爭態(tài)。增大消息隊(duì)列的大小,可以有效減少競態(tài)條件的出現(xiàn)。 "
前一個(gè)句號:減少有人拿到了互斥鎖的時(shí)候,再有人申請,此時(shí)后來者將陷入內(nèi)核等待。
后一個(gè)句號:增大消息隊(duì)列長度,可以減少pthread_cond_signal的調(diào)用頻率,該調(diào)用總是陷入內(nèi)核。
“互斥變量的競爭和隊(duì)列長度有什么相關(guān)? ”,沒啥關(guān)系,上面中間是句號, 你當(dāng)成逗號了吧,呵呵。
"盡量避免pthread_mutex進(jìn)入競爭態(tài)。增大消息隊(duì)列的大小,可以有效減少競態(tài)條件的出現(xiàn)。 "
前一個(gè)句號:減少有人拿到了互斥鎖的時(shí)候,再有人申請,此時(shí)后來者將陷入內(nèi)核等待。
后一個(gè)句號:增大消息隊(duì)列長度,可以減少pthread_cond_signal的調(diào)用頻率,該調(diào)用總是陷入內(nèi)核。
“互斥變量的競爭和隊(duì)列長度有什么相關(guān)? ”,沒啥關(guān)系,上面中間是句號, 你當(dāng)成逗號了吧,呵呵。
re: 【原創(chuàng)】項(xiàng)目管理之 個(gè)人小結(jié)[未登錄] CppExplore 2009-10-16 20:43
@搖擺胖胖
你是指這篇blog里的圖嗎?這是甘特圖,用GanttProject畫的 開源的。
時(shí)序圖,以前用rose畫,現(xiàn)在改startuml了,也是開源的
你是指這篇blog里的圖嗎?這是甘特圖,用GanttProject畫的 開源的。
時(shí)序圖,以前用rose畫,現(xiàn)在改startuml了,也是開源的
re: 【原創(chuàng)】技術(shù)系列之 定時(shí)器(二)[未登錄] cppexplore 2009-09-29 08:30
@neou
看過。
兩碼事情,8253芯片計(jì)時(shí),os里中斷處理。
看過。
兩碼事情,8253芯片計(jì)時(shí),os里中斷處理。
re: 一個(gè)輕量級智能指針實(shí)現(xiàn)[未登錄] cppexplore 2009-09-23 22:25
語言層面沒有這種機(jī)制。
可以用boost 或者自己封裝一層屏蔽os差異
可以用boost 或者自己封裝一層屏蔽os差異
re: 一個(gè)輕量級智能指針實(shí)現(xiàn)[未登錄] cppexplore 2009-09-23 21:24
智能指針常用的就是線程間傳遞指針類型數(shù)據(jù)的時(shí)候,導(dǎo)致兩個(gè)線程不能確定該指針釋放的時(shí)間點(diǎn),所以基本上不加鎖的智能指針用處不大。
re: 擴(kuò)充完路徑庫 cppexplore 2009-09-14 19:22
已經(jīng)移出首頁。
cppblog基本上比較自由,是否發(fā)首頁由作者自己決定,發(fā)的時(shí)候最好斟酌下,謝謝!
cppblog基本上比較自由,是否發(fā)首頁由作者自己決定,發(fā)的時(shí)候最好斟酌下,謝謝!
re: pku 2236 cppexplore 2009-07-14 11:09
博主,這種整篇都是代碼的文章 就不要再往首頁上發(fā)了。全是代碼,很少會有人看的,很多人訂閱了首頁,盡量不要浪費(fèi)大家的時(shí)間。
re: 【原創(chuàng)】技術(shù)系列之 狀態(tài)機(jī)(二)[未登錄] cppexplore 2009-07-06 20:33
@大華
莫非是浙江大華的朋友,呵呵
莫非是浙江大華的朋友,呵呵