免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4583 | 回复: 6
打印 上一主题 下一主题

请教多线程写磁盘文件的问题~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-16 21:20 |只看该作者 |倒序浏览
大家好,
    小弟最近在做毕业设计时遇到了一些问题,特向大家请教~~
    我的毕业设计是录音服务器的设计和实现,是在windows环境下用C++开发的,我知道咱们这里是Unix/Linux的系统论坛,但曾经在这里的学习使我受益良多,所以大家多多帮忙啊~先谢了~
    录音服务器中有一项功能,是允许多个录音终端实时向服务器传输语音数据,服务器将它们以语音文件的形式存在磁盘上。这里,涉及多线程在同一个磁盘分区写各自的语音文件的情况(并不是多线程同时向同一文件写入),当时最初的打算是各线程接到数据后调用windows API WriteFile将数据写入各自的文件,但有同学告诉我说在多线程的情况下并发调用WriteFile可能会出错,我对系统底层的调用没有了解,所以觉得这种情况也有可能,于是编测试程序试验。

    测试程序中使用3个线程并发写入3个文件,反复测试没有发现异常。于是,我初步断定,多线程是可以并发调WriteFile的。但今早的另一测试又使我产生了疑问。

    假设原测试程序在D:\test目录下并发写入三个文件,在该程序运行时,我从别的目录中鼠标右键复制了一个内含较多小文件的文件夹(假设名为a),将其粘贴到D:\test目录下,发现没有问题,而后又Shift+Delete删除该文件夹,在删除过程中有时却出现了“a中某一个文件夹内不为空,无法删除”的提示,提示出现后再次Shift+Delete往往就可将a及其子文件顺利删除。

    想向大家请教:
    1.windows操作系统调用WriteFile可以在多线程环境下并发使用吗?如果可以,那为什么系统会弹出错误呢?
    2.windows操作系统调用WriteFile是不是不可被中断的呢?
    3.服务器如果每接到网络上的一个包数据就调用WriteFile写入磁盘,我感觉会效率很低,所以我想将数据缓存起来,达到某一值再一次写入,请问,多大的缓存比较合适呢?我的想法是512K或1M等。
    4.如果在我这个服务器中使用缓存策略,大家有什么比较好的数据结构和算法来达到高效的文件写入呢?

    写的很长,谢谢大家的耐心阅读和解答~~

论坛徽章:
0
2 [报告]
发表于 2008-04-17 09:16 |只看该作者
没看明白
你的线程操作的是test下非a的文件,你把a放到D:\test 和 E:\test应该是一样的效果吧
你那种情况我本来猜测是因为你的线程会操作a下面的文件,可是却没有,所以如果你描述正确的话,我不知道为什么

关于BUF,你可以估计一下数据的平均速度,我觉得一般情况用标准库就可以了,把BUF设置大点就可以,不用去自己去开个BUF

论坛徽章:
0
3 [报告]
发表于 2008-04-17 09:17 |只看该作者

回复 #1 dwlnet 的帖子

在你所说的情况下(写不同文件)WriteFile可以多现成并行.
WriteFile是由操作系统管理的,你不用关心中断的问题.
多大的缓存由你机器的IO CPU性能决定.

论坛徽章:
0
4 [报告]
发表于 2008-04-17 10:59 |只看该作者
谢谢两位的指点~~

论坛徽章:
0
5 [报告]
发表于 2008-04-17 11:16 |只看该作者
1. 毫无疑问,可以。
2. 当然可以。
3. 想法很好,1M性能好于512k,数据包缓冲区一般是64k左右,所以512和1M差别不是很大。
4. 环形缓冲区,你要保证读写同步,不能发生覆盖情况。这个可以避免申请内存开销。

论坛徽章:
0
6 [报告]
发表于 2008-04-17 11:32 |只看该作者
谢谢nicolas.shen

论坛徽章:
0
7 [报告]
发表于 2008-04-18 20:27 |只看该作者
顶一下~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP