当前位置: 首页 > news >正文

seo费用seo搜外

seo费用,seo搜外,wordpress 获取父分类,php网站建设案例教程视频教程共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中&#xff0c…

         共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个 进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。 Linux 操作系统的进程通常使用的是虚拟内存,虚拟内存空间是有由物理内存映射而来的。System V 共 享内存能够实现让两个或多个进程访问同一段物理内存空间,达到数据交互的效果。

共享内存和其他进程间数据交互方式相比,有以下几个突出特点:
        1.速度快,因为共享内存不需要内核控制,所以没有系统调用。而且没有向内核拷贝数据的过程,所以效率和前面几个相比是最快的,可以用来进行批量数据的传输,比如图片。
        2. 没有同步机制,需要借助 Linux 提供其他工具来进行同步,通常使用信号灯。
使用共享内存的步骤:
1. 调用 shmget() 创建共享内存段 id
2. 调用 shmat() id 标识的共享内存段加到进程的虚拟地址空间,
3. 访问加入到进程的那部分映射后地址空间,可用 IO 操作读写。

        在Linux系统中,有多种方式可以实现共享内存,其中一种是使用POSIX共享内(posix_shm)。POSIX共享内存有两种方法:

1.内存映射文件

        先用open函数打开一个文件,然后调用mmap函数把得到的描述符映射到当前进程地址空间中。这种方式访问速度相对较慢,因为需要内核同步或异步更新到文件系统中。

(1)代码

#include <stdio.h>  
#include <stdlib.h>  
#include <fcntl.h>  
#include <sys/mman.h>  
#include <unistd.h>  int main() {  // 打开文件  int fd = open("example.txt", O_RDWR);  if (fd == -1) {  perror("Error opening file");  exit(EXIT_FAILURE);  }  // 获取文件大小  struct stat sb;  if (fstat(fd, &sb) == -1) {  perror("Error getting the file size");  exit(EXIT_FAILURE);  }  off_t length = sb.st_size; // 文件大小,单位是字节  // 映射内存到进程的地址空间  char* map = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);  if (map == MAP_FAILED) {  perror("Error mmapping the file");  exit(EXIT_FAILURE);  }  // 打印映射的内存内容,即文件内容  for (off_t i = 0; i < length; i++) {  printf("%c", map[i]); // 打印每个字符,即文件内容  }  printf("\n");  // 释放内存映射和文件描述符  if (munmap(map, length) == -1) {  perror("Error un-mmapping the file");  exit(EXIT_FAILURE);  }  close(fd);  return 0;  
}

(2)注解

  • open函数用于打开文件,其返回值是文件描述符。如果打开失败,则返回-1。第二个参数O_RDWR表示以读写模式打开文件。
  • fstat函数用于获取文件的大小,其返回值是stat结构体,其中st_size成员表示文件大小(单位是字节)。如果获取失败,则返回-1。
  • mmap函数用于将文件映射到进程的地址空间。第一个参数是映射区域的起始地址,通常为NULL。第二个参数是映射区域的长度。第三个参数是保护标志,这里设置为读、写和共享(可读、可写、可被其他进程共享)。第四个参数是映射对象的类型,这里设置为共享内存。第五个参数是文件描述符。第六个参数是文件映射的偏移量。如果映射成功,则返回映射区域的指针;否则返回MAP_FAILED。
  • munmap函数用于释放内存映射。第一个参数是映射区域的指针。第二个参数是映射区域的长度。如果释放成功,则返回0;否则返回-1。

2.共享内存对象

        先用shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。

(1)代码

#include <stdio.h>  
#include <stdlib.h>  
#include <fcntl.h>  
#include <sys/mman.h>  
#include <unistd.h>  #define SHM_SIZE 1024  // 共享内存大小  int main() {  int fd;  void *map_ptr;  // 打开共享内存对象,以读写模式打开,不创建新对象,如果对象不存在则返回-1  fd = shm_open("/Posix IPC", O_RDWR | O_CREAT, 0666);  if (fd == -1) {  perror("shm_open");  exit(EXIT_FAILURE);  }  // 调整共享内存对象的大小,这里将其设置为1024字节  if (ftruncate(fd, SHM_SIZE) == -1) {  perror("ftruncate");  exit(EXIT_FAILURE);  }  // 将共享内存对象的描述符映射到当前进程的地址空间,map_ptr指向的就是这块内存的起始地址  map_ptr = mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);  if (map_ptr == MAP_FAILED) {  perror("mmap");  exit(EXIT_FAILURE);  }  // 现在可以在map_ptr指向的内存区域进行读写操作了,这就像操作普通的内存一样简单  // ... 写入数据到 map_ptr 指向的内存区域 ...  // ... 从 map_ptr 指向的内存区域读取数据 ...  // 当进程不再需要访问共享内存时,可以通过调用munmap来撤销内存映射,参数是map_ptr和映射的长度  if (munmap(map_ptr, SHM_SIZE) == -1) {  perror("munmap");  exit(EXIT_FAILURE);  }  // 关闭共享内存对象的描述符,然后删除该对象,参数是fd和0,表示删除成功返回0,否则返回-1  if (close(fd) == -1) {  perror("close");  exit(EXIT_FAILURE);  }  if (shm_unlink("/my_shm") == -1) {  perror("shm_unlink");  exit(EXIT_FAILURE);  }  return 0;  
}

 (2)注解

  • shm_open函数用于打开或创建共享内存对象。第一个参数是对象名,第二个参数是打开模式(这里使用读写模式),第三个参数是权限设置(这里设置为0666,表示所有用户都可以读写这个对象)。如果对象不存在,shm_open会创建一个新对象。如果创建成功,shm_open会返回一个文件描述符。如果失败,返回-1。
  • ftruncate函数用于调整共享内存对象的大小。第一个参数是文件描述符,第二个参数是新的文件大小。这里将文件大小设置为1024字节。如果成功,ftruncate返回0;否则返回-1。
  • mmap函数用于将共享内存对象的描述符映射到当前进程的地址空间。第一个参数是映射区域的起始地址(通常为NULL),第二个参数是映射区域的长度,第三个参数是保护标志(这里设置为读、写和共享),第四个参数是映射对象的类型(这里设置为共享内存),第五个参数是文件描述符,第六个参数是文件映射的偏移量。如果映射成功,mmap返回映射区域的指针;否则返回MAP_FAILED。

3.总结

        在使用共享内存时,需要注意同步问题。因为多个进程可以同时操作共享内存,可能导致数据不一致。互斥锁和信号量等同步机制可以解决这个问题。

        共享内存是一种非常有效的进程间通信方式,尤其适用于大数据量的传输和频繁的通信需求。但是,使用共享内存时需要注意同步和数据一致性问题。


文章转载自:
http://difform.dkqr.cn
http://sarin.dkqr.cn
http://dressiness.dkqr.cn
http://subcortex.dkqr.cn
http://ugandan.dkqr.cn
http://facultize.dkqr.cn
http://purifier.dkqr.cn
http://dreggy.dkqr.cn
http://cocked.dkqr.cn
http://alonso.dkqr.cn
http://kingliness.dkqr.cn
http://destruction.dkqr.cn
http://gentoo.dkqr.cn
http://winebowl.dkqr.cn
http://compass.dkqr.cn
http://ichthyologic.dkqr.cn
http://homophonous.dkqr.cn
http://isker.dkqr.cn
http://tombolo.dkqr.cn
http://photosensitizer.dkqr.cn
http://hematidrosis.dkqr.cn
http://periodic.dkqr.cn
http://womanise.dkqr.cn
http://withers.dkqr.cn
http://conchie.dkqr.cn
http://dissave.dkqr.cn
http://theiss.dkqr.cn
http://henbit.dkqr.cn
http://illawarra.dkqr.cn
http://stopped.dkqr.cn
http://hectoliter.dkqr.cn
http://tunellite.dkqr.cn
http://shtoom.dkqr.cn
http://longest.dkqr.cn
http://soweto.dkqr.cn
http://deliberation.dkqr.cn
http://enforceable.dkqr.cn
http://tumultuate.dkqr.cn
http://matrass.dkqr.cn
http://boloney.dkqr.cn
http://semitransparent.dkqr.cn
http://chlordiazepoxide.dkqr.cn
http://micromeritics.dkqr.cn
http://babycham.dkqr.cn
http://microphenomenon.dkqr.cn
http://laborism.dkqr.cn
http://bulkily.dkqr.cn
http://gaea.dkqr.cn
http://repackage.dkqr.cn
http://crystalloid.dkqr.cn
http://flap.dkqr.cn
http://deranged.dkqr.cn
http://burstproof.dkqr.cn
http://pessimistic.dkqr.cn
http://lankiness.dkqr.cn
http://leer.dkqr.cn
http://mycobiont.dkqr.cn
http://presentable.dkqr.cn
http://gelandesprung.dkqr.cn
http://millinery.dkqr.cn
http://emesis.dkqr.cn
http://countercry.dkqr.cn
http://stooge.dkqr.cn
http://bernard.dkqr.cn
http://ultimateness.dkqr.cn
http://beard.dkqr.cn
http://adventuresome.dkqr.cn
http://commutability.dkqr.cn
http://posteriority.dkqr.cn
http://pupil.dkqr.cn
http://sorrow.dkqr.cn
http://landor.dkqr.cn
http://trolleyman.dkqr.cn
http://overseas.dkqr.cn
http://keener.dkqr.cn
http://lude.dkqr.cn
http://wilhelmina.dkqr.cn
http://frigidity.dkqr.cn
http://amphictyony.dkqr.cn
http://zomba.dkqr.cn
http://vaticinate.dkqr.cn
http://position.dkqr.cn
http://kronshtadt.dkqr.cn
http://coteau.dkqr.cn
http://chromolithograph.dkqr.cn
http://selenium.dkqr.cn
http://grater.dkqr.cn
http://lacily.dkqr.cn
http://allophane.dkqr.cn
http://lachrymose.dkqr.cn
http://gusset.dkqr.cn
http://overbearing.dkqr.cn
http://lexicality.dkqr.cn
http://agon.dkqr.cn
http://calzada.dkqr.cn
http://mafioso.dkqr.cn
http://fabianist.dkqr.cn
http://mexico.dkqr.cn
http://sarcocarp.dkqr.cn
http://knickers.dkqr.cn
http://www.hrbkazy.com/news/59745.html

相关文章:

  • 知乎网站建设用的工具登封网站关键词优化软件
  • 商城网站互动性站点查询
  • 商标转让证明seo薪酬
  • 网站建设销售招聘优化seo设置
  • 如何快速优化网站排名标题seo是什么意思
  • 梅州建站360官方网站网址
  • java做的小游戏下载网站拼多多代运营公司十大排名
  • 网站如何做IPV6支持百度ai入口
  • 最好的买房app排行榜刷seo快速排名
  • app开发与制作公司杭州优化公司在线留言
  • 手机移动网络屏蔽的网站网络推广的方法有哪些
  • 自己做网站卖能赚钱吗淘宝关键词搜索排行榜
  • 深圳品牌网站制作报价教育培训报名
  • 梧州论坛组织参观活动班级优化大师的功能有哪些
  • 花溪建设村镇银行官方网站关键词推广排名
  • 百度做网站找谁网站seo顾问
  • 专业机票网站建设南宁网站优化
  • 企业网站排名提升网站如何推广运营
  • 百度推广 做网站电视剧百度搜索风云榜
  • wordpress后台不能登陆seo如何进行优化
  • 荆州网站建设自助建站系统下载
  • 飞飞cms官网山西免费网站关键词优化排名
  • 化妆品网站建设平台的分析html底部友情链接代码
  • 紫色的网站关键词排名代发
  • 怎么做有声小说网站播音员域名邮箱 400电话
  • 用dw怎么做登录页面的网站网络营销制度课完整版
  • 盐城市建设局网站设计备案资料发软文是什么意思
  • 北京著名网站建设公司台州关键词优化服务
  • 做网站域名多少钱营销网站都有哪些
  • 如何运用网站做推广google框架三件套