【山水天下指标源码】【玩时代红包源码】【jsp源码使用教程】shm open 源码

2024-11-29 05:47:32 来源:值班表源码php 分类:探索

1.java mmap
2.System v 和Posix

shm open 源码

java mmap

       java mmap是什么,让我们一起了解一下?

        mmap是将一个文件或者其它对象映射进内存,文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。

        目前Java提供的mmap只有内存文件映射,其他IO操作还没有内存映射功能。

        Java内存映射文件(Memory Mapped Files)就已经在java.nio包中,但它对很多程序开发者来说仍然是一个相当新的概念。引入NIO后,Java IO已经相当快,而且内存映射文件提供了Java有可能达到的最快IO操作,这也是为什么那些高性能Java应用应该使用内存映射文件来持久化数据。

       mmap在Java中的用途是什么?

        1、对普通文件使用mmap提供内存映射I/O,以避免系统调用(read、write、lseek)带来的性能开销。同时减少了数据在内核缓冲区和进程地址空间的拷贝次数。

       2、使用特殊文件提供匿名内存映射。

        3、使用shm_open以提供无亲缘关系进程间的Posix共享内存区。

        mmap在Java中是如何使用的?(具体参考kafka源码中的OffsetIndex这个类)

       æ“ä½œæ–‡ä»¶ï¼Œå°±ç›¸å½“于操作一个ByteBuffer一样。 public class TestMmap { undefined public static String path = "C:\\Users\\\\Desktop\\mmap"; public static void main(String[] args) throws IOException { undefined File file1 = new File(path, "1"); RandomAccessFile randomAccessFile = new RandomAccessFile(file1, "rw"); int len = ; // æ˜ å°„为2kb,那么生成的文件也是2kb MappedByteBuffer mmap = randomAccessFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, len); System.out.println(mmap.isReadOnly()); System.out.println(mmap.position()); System.out.println(mmap.limit()); // å†™æ•°æ®ä¹‹åŽï¼ŒJVM é€€å‡ºä¹‹åŽä¼šå¼ºåˆ¶åˆ·æ–°çš„ mmap.put("a".getBytes()); mmap.put("b".getBytes()); mmap.put("c".getBytes()); mmap.put("d".getBytes()); // System.out.println(mmap.position()); // System.out.println(mmap.limit()); // // mmap.force(); // å‚考OffsetIndex强制回收已经分配的mmap,不必等到下次GC, unmap(mmap); // åœ¨Windows上需要执行unmap(mmap); å¦åˆ™æŠ¥é”™ // Windows won't let us modify the file length while the file is mmapped // java.io.IOException: è¯·æ±‚的操作无法在使用用户映射区域打开的文件上执行 randomAccessFile.setLength(len/2); mmap = randomAccessFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, len/2); // A mapping, once established, is not dependent upon the file channel // that was used to create it. Closing the channel, in particular, has no // effect upon the validity of the mapping. randomAccessFile.close(); mmap.put(, "z".getBytes()[0]); } // copy from FileChannelImpl#unmap(私有方法) private static void unmap(MappedByteBuffer bb) { undefined Cleaner cl = ((DirectBuffer)bb).cleaner(); if (cl != null) cl.clean(); } }

System v 和Posix

       在Linux系统中进行进程间通信时,我们常常会遇到System v和POSIX两种类型的接口。POSIX,全称Portable Operating System Interface for Computing Systems,山水天下指标源码是由IEEE和ISO/IEC合作制定的一套标准,旨在确保应用程序在不同操作系统上源代码级别的移植性。它源于年代早期的UNIX用户组工作,旨在统一System V(由AT&T开发)和Berkeley BSD系统之间的调用接口,最终在年发布了POSIX.1标准(IEEE .1-)。

       System V,最初称为AT&T System V,玩时代红包源码是Unix众多版本中的一员,由AT&T开发于年,历经多个版本,其中SVR4(System V Release 4)最为成功,影响了诸如初始化脚本(/etc/init.d)等UNIX共同特性。jsp源码使用教程System V不仅仅局限于AT&T的硬件,许多转售版本如Dell SVR4和Bull SVR4也基于其。如今,SCO OpenServer基于System V Release 3,而SUN Solaris和SCO UnixWare则基于SVR4。2017云监控源码System V被视为UNIX两种主要风格(另一是BSD)之一,但随着Linux和QNX等非传统实现的出现,这一分类不再准确。标准化努力如POSIX致力于减少不同实现之间的差异。

       System V和POSIX在Linux/unix系统编程中扮演着接口协议的接龙小程序 源码角色,POSIX相对System V更新,语法简洁。进程间通信(IPC)是两者共同关注的领域,POSIX IPC中对象有名称,如mq_open、sem_open、shm_open中的名称并不一定对应文件系统。创建或打开IPC对象时,需要指定操作模式,如读写权限。而System V IPC中,key_t类型在msget、semget、shmget等函数中扮演关键角色。

更多资讯请点击:探索

热门资讯

克隆app源码_克隆软件下载

2024-11-29 04:331581人浏览

麒麟源码编译_麒麟系统源代码

2024-11-29 04:212943人浏览

麒麟源码编译_麒麟系统源代码

2024-11-29 04:071507人浏览

python推荐源码_优秀python源码

2024-11-29 03:151344人浏览

clion调试源码_clion调试使用教程

2024-11-29 03:07564人浏览

推荐资讯

展览登记源码_展览登记源码怎么弄

1.申办软件著作权如何登记2.软著的相关知识有哪些?3.北京故宫网页代码_用html+css+js+div设计的网页(网页制作与设计源码)4.江苏网站申请软件著作权申报申办软件著作权如何登记 自然

出售公司源码_出售公司源码 判决

1.源码交易流程2.倒卖其他公司商业软件源代码将承担什么样的法律责任呢?3.倒卖源码赚钱项目,小白也能操作的变现方式4.好用靠谱的商业源码网站推荐建议收藏!5.买软件和买源码哪个违法源码交易流程

nft邀请源码_邀请代码

1.国内nft有什么属性?2.如何查看nft智能合约,nft合约代码3.nft为什么被炒热了,NFT到底是啥国内nft有什么属性? 阿里腾讯纷纷入局,NFT究竟有何魔力 一夜之间,NFT成了风