c语言编写服务器的优点,用C语言编写的服务器中记录效率最高的文件是什么?...

使用线程通常是一个很好的解决方案,我们通过它有趣的结果。

需要记录的主线程准备日志字符串并将其传递给第二个线程。为了提供第二个线程,我们使用无锁队列+循环内存来尽量减少alloc/free和等待时间。

secon线程等待无锁队列可用。当它发现需要做一些工作时,无锁队列的一个新槽被消耗并记录数据。

使用单独的线程可以节省大量时间。

当我们决定使用secon线程后,我们不得不面对另一个问题。同一个程序(一个全文serach引擎)的许多事件必须全部记录在同一个文件中,以便在服务器的每个实例之间定期共享资源。

我们可以决定使用一个信号量或另一个syncornizing方法,但我们发现了另一个解决方案:第二个线程发送一个UDP数据包到本地日志服务器,该服务器侦听已知端口。该服务器读取每条消息并将其记录在文件上(服务器实际上是写入文件时唯一拥有该文件的服务器)。 UDP套接字本身授予日志的序列化。

我一直在使用这个解决方案超过10年,并且从未松动我的日志文件的单行,使用第二个线程我也为每个操作节省了大量的时间(我们用来记录大量的服务器接收到的任何单个命令的信息)。

HTH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值