Wal*_*inz 6 concurrency file-io haskell
我有一个存储Binary数据的大文件.有多个线程读取和写入这些文件,我当前的设计使用单个文件同步它们Lock.这样一来,我只有一个Handle在ReadWriteMode打开一个文件,并将所有线程对于单个锁定战斗时,他们觉得自己做一些I/O.
我想通过允许多个读者同时工作来改进这一点.我尝试过使用a RWLock并打开多个Handle.这RWLock将确保只有一个线程修改文件,同时允许多个线程(我有多个句柄打开,编译时常量)同时读取.当试图运行此,我被一个事实,即运行时命中只允许有一个 Handle在ReadWriteMode为随时文件存在.
我该如何解决这种情况?我认为获取/释放a Handle是一项昂贵的操作,因此在获取之后只需以适当的模式打开文件RWLock就不是一种选择.或者,也许有一个包,提供类似Java的API FileChannel的读取和写入 的方法呢?
PS:我想支持32位架构,因此文件> 4GiB无法实现内存映射IO,对吗?
小智 0
所以你的问题是你不想使用 stateful Handles(其中状态是文件中的当前位置)?在这种情况下,我猜你需要pread和pwrite。
man pread
对于 Haskell 绑定:http://hackage.haskell.org/package/unix-bytestring-0.3.7.2/docs/System-Posix-IO-ByteString.html
有关使用示例,您可以查看此处:https ://github.com/errge/PrefetchFS/blob/master/PrefetchHandle.hs
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |