成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

c++隊(duì)列 多線(xiàn)程寫(xiě)日志怎么保證時(shí)序性?

多線(xiàn)程寫(xiě)日志怎么保證時(shí)序性?鎖定寫(xiě)入文件,或?qū)⒚總€(gè)文件的日志放入不同的隊(duì)列。每次處理隊(duì)列消息時(shí),其他線(xiàn)程都不能操作隊(duì)列首先,設(shè)計(jì)一個(gè)一個(gè)線(xiàn)程寫(xiě)一個(gè)線(xiàn)程讀的隊(duì)列,該隊(duì)列有兩個(gè)指針讀寫(xiě)。閱讀線(xiàn)程:1。首先

多線(xiàn)程寫(xiě)日志怎么保證時(shí)序性?

鎖定寫(xiě)入文件,或?qū)⒚總€(gè)文件的日志放入不同的隊(duì)列。每次處理隊(duì)列消息時(shí),其他線(xiàn)程都不能操作隊(duì)列

首先,設(shè)計(jì)一個(gè)一個(gè)線(xiàn)程寫(xiě)一個(gè)線(xiàn)程讀的隊(duì)列,該隊(duì)列有兩個(gè)指針讀寫(xiě)。閱讀線(xiàn)程:1。首先判斷讀寫(xiě)指針。如果讀取指針==寫(xiě)入指針,則不返回?cái)?shù)據(jù),否則讀取數(shù)據(jù),然后讀取指針1。寫(xiě)入線(xiàn)程:1。(如果使用循環(huán)隊(duì)列)在寫(xiě)入線(xiàn)程進(jìn)入后檢查讀寫(xiě)指針。如果讀指針=寫(xiě)指針1,那么寫(xiě)線(xiàn)程進(jìn)入線(xiàn)程開(kāi)關(guān)并繼續(xù)寫(xiě),直到讀指針移動(dòng)。(如果數(shù)據(jù)是可以丟棄的實(shí)時(shí)數(shù)據(jù),則不能進(jìn)行判斷)//為了對(duì)數(shù)據(jù)進(jìn)行原子化操作,最好將指針保存在循環(huán)隊(duì)列中。2寫(xiě)指針來(lái)寫(xiě)數(shù)據(jù),1。接下來(lái),考慮當(dāng)多個(gè)線(xiàn)程同時(shí)寫(xiě)入時(shí)如何實(shí)現(xiàn)。首先,申請(qǐng)TLS值(建議使用運(yùn)行時(shí),而不是API,因?yàn)锳PI進(jìn)程最多只能申請(qǐng)255,這樣很容易用完)。然后,每個(gè)線(xiàn)程保存上面實(shí)現(xiàn)的讀寫(xiě)隊(duì)列,并將隊(duì)列地址放入一個(gè)結(jié)構(gòu)中。每個(gè)寫(xiě)線(xiàn)程將數(shù)據(jù)寫(xiě)入自己線(xiàn)程所擁有的隊(duì)列,每個(gè)寫(xiě)線(xiàn)程將數(shù)據(jù)寫(xiě)入需要保存的時(shí)間計(jì)數(shù)(getsystemtimeasfiletime)以判斷每個(gè)隊(duì)列中節(jié)點(diǎn)的順序。讀取線(xiàn)程依次遍歷所有隊(duì)列,取出隊(duì)列中的值,并按時(shí)間計(jì)數(shù)的順序進(jìn)行處理。

如何實(shí)現(xiàn)多個(gè)線(xiàn)程寫(xiě),一個(gè)線(xiàn)程讀的隊(duì)列,并且所有線(xiàn)程?

有很多方法可以使用它。

如果通話(huà)頻率不高,我會(huì)做定量分析程序。通常,我使用C來(lái)啟用python進(jìn)程。pypy的速度更快。Pypy將結(jié)果生成到redis或mysql的內(nèi)存表中。調(diào)用后,C轉(zhuǎn)到redis或mysql的內(nèi)存表,也可以用文件寫(xiě)入來(lái)完成,但文件寫(xiě)入很容易出現(xiàn)不同步,不想用網(wǎng)絡(luò)版,可以用SQLite來(lái)寫(xiě)結(jié)果,然后用SQLite在另一個(gè)程序中讀取。如果它類(lèi)似于Internet服務(wù),則可以使用消息隊(duì)列和消息服務(wù)器進(jìn)行通信。如果您的程序需要線(xiàn)程安全和關(guān)鍵區(qū)域保護(hù),最好使用消息隊(duì)列來(lái)支持多線(xiàn)程和多進(jìn)程同時(shí)訪(fǎng)問(wèn)。消息隊(duì)列比數(shù)據(jù)庫(kù)存儲(chǔ)速度快,但不便于數(shù)據(jù)庫(kù)存儲(chǔ)。

vedis的原生版本有C版本,高仿redis的嵌入式版本。您可以使用這個(gè)初始開(kāi)發(fā)。如果您需要切換到redis,您可以輕松地將vedis修改為redis。SSDB可以在地面存儲(chǔ)redis。SSDB是高仿redis的存儲(chǔ)版本。

如果沒(méi)有數(shù)據(jù)存儲(chǔ),可以使用套接字通信或多進(jìn)程通信。例如,chrome是多進(jìn)程的,命名管道用于通信。理論上,這可以用于多語(yǔ)言之間的調(diào)用。命名管道比消息隊(duì)列快,但需要自定義。調(diào)用方法的協(xié)議可以用JSON來(lái)完成,因此一般可以使用n種多語(yǔ)言。如果我們追求性能,我們可以使用二進(jìn)制通信協(xié)議。

Python調(diào)用C語(yǔ)言的方法也很成熟,但需要編寫(xiě)一些代碼打包,需要防止內(nèi)存泄漏、多線(xiàn)程同步、阻塞、異常等問(wèn)題。