c语言编写服务器的优点,用C语言编写的服务器中记录效率最高的文件是什么?...
使用線程通常是一個(gè)很好的解決方案,我們通過(guò)它有趣的結(jié)果。
需要記錄的主線程準(zhǔn)備日志字符串并將其傳遞給第二個(gè)線程。為了提供第二個(gè)線程,我們使用無(wú)鎖隊(duì)列+循環(huán)內(nèi)存來(lái)盡量減少alloc/free和等待時(shí)間。
secon線程等待無(wú)鎖隊(duì)列可用。當(dāng)它發(fā)現(xiàn)需要做一些工作時(shí),無(wú)鎖隊(duì)列的一個(gè)新槽被消耗并記錄數(shù)據(jù)。
使用單獨(dú)的線程可以節(jié)省大量時(shí)間。
當(dāng)我們決定使用secon線程后,我們不得不面對(duì)另一個(gè)問(wèn)題。同一個(gè)程序(一個(gè)全文serach引擎)的許多事件必須全部記錄在同一個(gè)文件中,以便在服務(wù)器的每個(gè)實(shí)例之間定期共享資源。
我們可以決定使用一個(gè)信號(hào)量或另一個(gè)syncornizing方法,但我們發(fā)現(xiàn)了另一個(gè)解決方案:第二個(gè)線程發(fā)送一個(gè)UDP數(shù)據(jù)包到本地日志服務(wù)器,該服務(wù)器偵聽(tīng)已知端口。該服務(wù)器讀取每條消息并將其記錄在文件上(服務(wù)器實(shí)際上是寫入文件時(shí)唯一擁有該文件的服務(wù)器)。 UDP套接字本身授予日志的序列化。
我一直在使用這個(gè)解決方案超過(guò)10年,并且從未松動(dòng)我的日志文件的單行,使用第二個(gè)線程我也為每個(gè)操作節(jié)省了大量的時(shí)間(我們用來(lái)記錄大量的服務(wù)器接收到的任何單個(gè)命令的信息)。
HTH
總結(jié)
以上是生活随笔為你收集整理的c语言编写服务器的优点,用C语言编写的服务器中记录效率最高的文件是什么?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 空调的外机需要加润滑油保养吗?
- 下一篇: ajax文件上传报400,js ajax