共享内存对应应用开发的意义
【程序编程相关:4种Dolby声场技术的区别】 【推荐阅读:Dolby与DTS】对熟知unix系统应用开发的程序员来说,ipc(interprocess communication)机制是非常熟悉的,ipc基本包括共享内存.信号灯操作.消息队列.信号处理等部分,是开发应用中非常重要的必不可少的工具.其中共享内存ipc机制的关键,对于数据共享.系统快速查询.动态配置.减少资源耗费等均有独到的优点. 【扩展信息:DTS Neo:6】对应unix系统来说,共享内存分为一般共享内存与映像文件共享内存两种,而对应 windows,实际上只有映像文件共享内存一种.所以java应用中也是只能创建映像文件共享内存.
在java语言中,基本上没有提及共享内存这个概念,但是,在某一些应用中,共享内存确实非常有用,例如采用java语言的分布式应用系统中,存在着大量的分布式共享对象,很多时候需要查询这些对象的状态,以查看系统是否运行正常或者了解这些对象的目前的一些统计数据与状态.如果采用网络通信的方式,显然会增加应用的额外负担,也增加了一些不必要的应用编程.而如果采用共享内存的方式,则可以直接通过共享内存查看对象的状态数据与统计数据,从而减少了一些不必要的麻烦.
共享内存的使用有如下几个特点:
可以被多个进程打开访问; 读写操作的进程在执行读写操作时其他进程不能进行写操作; 多个进程可以交替对某一共享内存执行写操作; 一个进程执行了内存的写操作后,不影响其他进程对该内存的访问.同时其他进程对更新后的内存具有可见性. 在进程执行写操作时如果异常退出,对其他进程写操作禁止应自动解除. 相对共享文件,数据访问的方便性与效率有另外,共享内存的使用上有如下情况:
独占的写操作,相应有独占的写操作等待队列.独占的写操作本身不会发生数据的一致性问题. 共享的写操作,相应有共享的写操作等待队列.共享的写操作则要注意防止发生数据的一致性问题. 独占的读操作,相应有共享的读操作等待队列; 共享的读操作,相应有共享的读操作等待队列.一般情况下,我们只是关心第一二种情况.
共享内存在java中的实现
在jdk1.4中提供的类mappedbytebuffer为我们实现共享内存提供了较好的方法.该缓冲区实际上是一个磁盘文件的内存映像.... 下一页