并发文件系统

Fra*_*See 2 java filesystems concurrency

我需要创建一个文件系统管理器(或多或少),它可以读取或写入数据到文件。

我的问题是如何处理并发?

我可以做类似的事情

public class FileSystemManager {

    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    public byte[] read(String path) {
        readWriteLock.readLock().lock();
        try {
            ...
        } finally {
            readWriteLock.readLock().unlock();
        }
    }
    public void write(String path, byte[] data) {
        readWriteLock.writeLock().lock();
        try {
            ...
        } finally {
            readWriteLock.writeLock().unlock();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这意味着对写入(例如)的所有访问都将被锁定,即使第一次调用的目标是 /tmp/file1.txt 而第二次调用的目标是 /tmp/file2.txt。

任何想法如何解决这个问题?

Dig*_*oss 5

建议为并发而不是线程传递消息

通常,这种锁定发生在 java 级别之下。您真的打算读写相同的文件和目录吗?实施目录?

现在有许多不安全的线程代码可能会随着线程开始真正在多核硬件上一起运行而开始爆炸。

我的建议是通过消息传递来管理并发。如果这是一项教育练习,您可以自己动手,或者使用无数排队和消息系统中的一个。在这种系统中,您只有一个读取器/写入器进程,但可能有许多客户端。您无需进行文件和线程并发管理。

消息传递范式的一个优点是,创建用于负载平衡的分布式系统要容易得多。