首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多进程间linux操作系统上的缓存问题

问多进程间linux操作系统上的缓存问题
EN

Stack Overflow用户
提问于 2015-09-05 04:59:04
回答 2查看 53关注 0票数 0

我有3个运行在Linux上的java进程,并执行数据库查询(MariaDB)和一些文件IO(硬盘和USB)。有时发生的情况是,一个进程的写操作不会在其他java进程上得到反映。

有两种情况:

  1. 在完成进程A的插入查询后,进程A立即启动另一个java进程(进程B),进程B在数据库中找不到插入的值。
  2. Process A在挂载USB上的路径X上从某个服务器下载文件。下载完成后,进程A通过RMI将路径X发送到进程B。当进程B试图在X处读取文件时,它会找到0字节的文件。只有当路径X在USB上时,才会发生这种情况,在硬盘上从来没有见过这个问题。如果我在发送路径X到进程B之前尝试读取进程A中的文件属性,那么一切都很好。

我怀疑刚才编写的访问数据的多个进程之间存在一些缓存问题。

更多信息: JAVA : 1.8 openJDK Linux : Fedora/CentOS

EN

回答 2

Stack Overflow用户

发布于 2015-09-05 09:40:18

  1. 你提交交易了吗?您的JDBC连接是否在自动提交上?
  2. 发送路径之前关闭文件了吗?如果您不关闭该文件,它仍然是开放的写入,操作系统和Java将缓冲写入。如果您想要连续地编写一个文件并确保其他进程看到您的更改,则需要有特殊的API结构,请参阅FileChannel.force()或RandomAccessFile的同步模式。
票数 2
EN

Stack Overflow用户

发布于 2015-09-05 07:48:55

在几乎所有的数据库中,只有一个进程可以安全地访问文件。通常,数据库将锁定文件,以防止多个进程访问。在某些情况下,这种情况可能会发生,但是除非数据库被设计为这样做,否则我不会使用这个特性。

顺便说一句:我们有一个数据库,专门用来做这件事,所以我们知道它并不简单,而且很少做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32409653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档