两个进程间的数据共享问题

问题描述

问题是这样的,有两个进程(或者更多的进程),启动的时候都从同一个文件读取数据,在各自的进程中建立对象模型。这两个进程还都可以修改数据。那么,问题来了,如果进程A修改了数据,进程B要适时的获得修改后的数据,应该采用什么样的解决方案来实现呢?因为程序的基础通信架构采用的是WCF,考虑过使用WCF进行通信来同步两个进程间的数据,但设计到的数据维度比较多,如果每一个属性的修改都需要来一次通信的话,这样肯定对性能就会产生很大的影响了。不知道,各位大神是否有更好的方案,烦请赐教!!!谢谢!!!

解决方案

解决方案二:
可以用信号量等进行互斥
解决方案三:
System.IO.FileSystemWatcher监测指定目录或文件的指定属性,如大小、最后修改时间、重命名等事件用内存映射文件或者命名管道(基于内存分页文件映射来实现的双工通信),只需要连接管道进行通信或者用win32API共享内存也可以
解决方案四:
引用1楼bdmh的回复:

可以用信号量等进行互斥

正解
解决方案五:
引用1楼bdmh的回复:

可以用信号量等进行互斥

版主大人可否说的具体点?之前没有了解过信号量进行互斥操作方面的技术。谢谢!
解决方案六:
可以考虑用日志同步写的一方不停地append数据[或命令]到文件,读的一方使用文件的position来读取文件,然后执行命令,完成同步.如果是双向的,那么使用两个文件.好处是可以做到无阻塞,在高吞吐量的环境下最好用这个.
解决方案七:
没有太多实时性要求的话,标准做法是用数据库。
解决方案八:
多谢大家的解答,这个问题我现在的处理方案是这样的,通信仍然使用的是WCF,但是采用了AOP技术去拦截Model中属性值的设置,如果有新的属性值,则直接通过WCF发送给其他的进程,由其他的进程去同步各自的Model。基本的框架已经出来了,就是对集合的处理还需要在优化一些!

时间: 2024-11-08 18:53:01

两个进程间的数据共享问题的相关文章

两个进程间能使用共享内存段进行数据共享吗?

问题描述 两个进程间能使用共享内存段进行数据共享吗? 我是这样做的: 在一个dll里面定义一个共享数据段,里面定义一个整形数据,然后定义两个导出函数对这个整形数据进行操作. #pragma data_seg ("ShareDataSeg") //开辟一个名字为"ShareDataSeg"的共享内存段 int g_nShareInt = 0; #pragma data_seg() //共享内存段"ShareDataSeg"定义结束 //加上这条声明

浅谈Delphi中进程间的数据共享

DLL是创建Windows应用程序,实现代码重用的重要手段.那么当我们需要在进程间共享数据时,怎样做才能快捷方便地实现呢?在32位应用系统中,每个应用程序会将DLL映射到自己的地址空间,同时DLL中的数据也就随之被映射了.这样,每个应用程序都有自己的数据实例,在一个应用程序中修改DLL中的全局变量,不会影响其它的应用程序.DLL的使用似乎与我们的目的相背离,那么如何才能实现我们想要的东东呢?这里给大家介绍一种特殊的技术,那就是内存映射文件. 内存映射文件提供了一种方法,就是在WIN32系统的地址

Delphi中进程间的数据共享

DLL是创建Windows应用程序,实现代码重用的重要手段.那么当我们需要在进程间共享数据时,怎样做才能快捷方便地实现呢?在32位应用系统中,每个应用程序会将DLL映射到自己的地址空间,同时DLL中的数据也就随之被映射了.这样,每个应用程序都有自己的数据实例,在一个应用程序中修改DLL中的全局变量,不会影响其它的应用程序.DLL的使用似乎与我们的目的相背离,那么如何才能实现我们想要的东东呢?这里给大家介绍一种特殊的技术,那就是内存映射文件. 内存映射文件提供了一种方法,就是在WIN32系统的地址

事件和进程间的数据交换 .

//======================================================================== //TITLE: //    事件和进程间的数据交换 //AUTHOR: //    norains //DATE: //    Monday  13-July-2009 //Environment: //    WINCE5.0 + VS2005 //================================================

chromium CEF3多个进程之间的数据共享问题

问题描述 chromium CEF3多个进程之间的数据共享问题 在chromium CEF3中,由于使用了多进程模式,导致浏览器进程和渲染进程是分开的.那么,我在渲染进程中需要用到的数据怎么从主进程(浏览器)进程中获取?比如:我在渲染进程的V8执行操作时,要用到主进程的一些参数.CEF3的进程间的数据共享是怎么做的?求大神指导,多谢! 解决方案 多进程之间,用共享内存方式,或者文件方式共享数据 解决方案二: 进程之间数据共享

关于linux使用动态库进行进程间通讯

问题描述 关于linux使用动态库进行进程间通讯 各位: 两个进程间通过动态库的方式如何进行参数的传递? 我首先在一个库中做了如下的内容: #include ""caculate.h""#include ""stdio.h""int iShare; #pragma data_seg (""shareddate"")int iShareInSeg = 1;#pragma data_seg#

《深入解析Android 5.0系统》——第6章,第6.5节进程间的消息传递

6.5 进程间的消息传递深入解析Android 5.0系统Android的消息可以在进程之间传递.进程间消息传递是建立在Binder通信基础之上的.Binder本身用来在进程间传递信息已经足够了,这里介绍的进程间消息传递方法只是让应用在设计上更加便利,并不是架构上大的改进. 我们知道,只要有了Binder的引用对象就可以调用其功能.Android中如果希望向另一个进程的Handler发送消息,一定要通过某个Binder对象来代理完成.在Handler类中,方法getIMessage()会创建一个

由一道面试题来了解进程间的通信

    周末面试碰到一个面试题,题目是: 在MMO游戏中,服务器采用Linux操作系统,网络通信与游戏逻辑处理进程一般是分离的.例如:GameSvr进程处理游戏逻辑,TCPSvr进程处理网络通信.Linux操作系统提供了很多机制可以实现GameSvr和TCPSvr进程之间的数据通信.请您列出两种你认为最好的机制来,并为主(最好)次(次佳)描述他们实现的框架,优缺点对比和应用中的注意事项. 答案:Linux下进程通信 一.进程间通信概述进程通信有如下一些目的:A.数据传输:一个进程需要将它的数据发

PHP中实现进程间通讯

进程 PHP中实现进程间通讯 邱文宇   本文将讨论在PHP4环境下如何使用进程间通讯机制--IPC(Inter-Process-Communication).本文讨论的软件环境是linux+php4.0.4或更高版本.首先,我们假设你已经装好了PHP4和UNIX, 为了使得php4可以使用共享内存和信号量,必须在编译php4程序时激活shmop和sysvsem这两个扩展模块. 实现方法:在PHP设定(configure)时加入如下选项. --enable-shmop --enable-sysv