现在打算读取共享内存区的数据并且保存。
本人采用方法是当前线程用20长度的链表存储,另外一个线程读取并发送到网络。
现在的问题是读取的速度小于写入的速度,经常出现缓冲区已经写满,但是读取还没有结束,导致数据被覆盖,丢失数据。
请问有没有好的方法解决???
万分感激!!!
15 个解决方案
#1
为什么规定链表的长度,你应该自动扩充链表啊
#2
恩 明白你的意思了 可是链表就这样无限的扩张吗,那不是会很浪费内存? 我用的环形链表。
本人新手,说的不专业的地方望见谅~
#3
那限定一下链表的长度,链表过长说明缓冲区已满写入失败,返回错误值或者阻塞等待写入。
#4
满了就写线程就sleep一段时间,如果你选1楼方案系统内存迟早被你用完
#5
那你读、写分别用不同的线程处理,缓冲区用各自的。。。
#6
1楼的是SB,不用理他,他的回答都是忽悠
#7
现在是写的速度大于读的速度
而且写的线程一定不能停 因为不允许丢失数据
而且写的线程一定不能停 因为不允许丢失数据
#8
写入大于读取,基本无解。
如果非要解的话,可以用临时文件cache下。然后慢慢发送。
如果你的数据是24小时都有的话,那就完全没办法了,只能提高带宽
如果非要解的话,可以用临时文件cache下。然后慢慢发送。
如果你的数据是24小时都有的话,那就完全没办法了,只能提高带宽
#9
既然写不能停,只能想办法加快读的速度,否则必然要丢数据
#10
写不停,不能用可扩充存贮结构,似乎没有更好方法了
#11
你好 我读取完毕后直接发送到网络,估计主要是发送比较耗时
#12
我对C不太了解,我说下我得思路,说的不对勿拍!
在维持现状的情况下,加快读的速度几乎不可能,读写速度还要考虑硬件,要完全保证数据在读的时候不被覆盖,保险的做法,增加一个主缓存区(不共享),写的线程先写缓存区,当共享缓存区不被读时,在写共享缓存区;读的线程只从共享缓存中读数据
在维持现状的情况下,加快读的速度几乎不可能,读写速度还要考虑硬件,要完全保证数据在读的时候不被覆盖,保险的做法,增加一个主缓存区(不共享),写的线程先写缓存区,当共享缓存区不被读时,在写共享缓存区;读的线程只从共享缓存中读数据
#13
程序是长时间运行了?如果是的话,那就没解了(再大的缓冲区早晚也会耗尽),只能提高网速(读的数度)。
每秒需要读多少数据?网速多少?
每秒需要读多少数据?网速多少?
#14
adsl上传速度只有512kb,大约传送50kByte/s,如果需要24小时采集数据的话,只能更换更大带宽的接入方式
#15
阻塞写入。
#1
为什么规定链表的长度,你应该自动扩充链表啊
#2
恩 明白你的意思了 可是链表就这样无限的扩张吗,那不是会很浪费内存? 我用的环形链表。
本人新手,说的不专业的地方望见谅~
#3
那限定一下链表的长度,链表过长说明缓冲区已满写入失败,返回错误值或者阻塞等待写入。
#4
满了就写线程就sleep一段时间,如果你选1楼方案系统内存迟早被你用完
#5
那你读、写分别用不同的线程处理,缓冲区用各自的。。。
#6
1楼的是SB,不用理他,他的回答都是忽悠
#7
现在是写的速度大于读的速度
而且写的线程一定不能停 因为不允许丢失数据
而且写的线程一定不能停 因为不允许丢失数据
#8
写入大于读取,基本无解。
如果非要解的话,可以用临时文件cache下。然后慢慢发送。
如果你的数据是24小时都有的话,那就完全没办法了,只能提高带宽
如果非要解的话,可以用临时文件cache下。然后慢慢发送。
如果你的数据是24小时都有的话,那就完全没办法了,只能提高带宽
#9
既然写不能停,只能想办法加快读的速度,否则必然要丢数据
#10
写不停,不能用可扩充存贮结构,似乎没有更好方法了
#11
你好 我读取完毕后直接发送到网络,估计主要是发送比较耗时
#12
我对C不太了解,我说下我得思路,说的不对勿拍!
在维持现状的情况下,加快读的速度几乎不可能,读写速度还要考虑硬件,要完全保证数据在读的时候不被覆盖,保险的做法,增加一个主缓存区(不共享),写的线程先写缓存区,当共享缓存区不被读时,在写共享缓存区;读的线程只从共享缓存中读数据
在维持现状的情况下,加快读的速度几乎不可能,读写速度还要考虑硬件,要完全保证数据在读的时候不被覆盖,保险的做法,增加一个主缓存区(不共享),写的线程先写缓存区,当共享缓存区不被读时,在写共享缓存区;读的线程只从共享缓存中读数据
#13
程序是长时间运行了?如果是的话,那就没解了(再大的缓冲区早晚也会耗尽),只能提高网速(读的数度)。
每秒需要读多少数据?网速多少?
每秒需要读多少数据?网速多少?
#14
adsl上传速度只有512kb,大约传送50kByte/s,如果需要24小时采集数据的话,只能更换更大带宽的接入方式
#15
阻塞写入。