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

建筑网站制作制作一个网页游戏需要多少钱

建筑网站制作,制作一个网页游戏需要多少钱,网站建设营销型号的区别,网站建设预算费用进程间通信 IPC 进程间通信的原理,借助进程之间使用同一个内核,借助内核,传递数据。 进程间通信的方法 管道:最简单。信号:开销小。mmap映射:速度最快,非血缘关系之间。socket(本…

进程间通信 IPC

  • 进程间通信的原理,借助进程之间使用同一个内核,借助内核,传递数据。

进程间通信的方法

  1. 管道:最简单。
  2. 信号:开销小。
  3. mmap映射:速度最快,非血缘关系之间。
  4. socket(本地套间字):稳定性好。

管道 pipe

  • 实现原理:借助 Linux 内核使用环形队列机制,借助缓冲区(4k)实现。

  • 特质:

    1. 本质:伪文件(实为内核缓冲区)
    2. 用于进程间通信,由两个 fd 引用,一个读端,一个写端。
    3. 规定数据从管道写端流入,读端流出。
  • 局限性:

    1. 自己写,不能自己读。
    2. 管道中的数据,不能反复读取。
    3. 半双工通信(对讲机)。
    4. 必须应用于血缘关系间。

使用的函数

函数调用成功自动创建匿名管道,返回两个文件描述符,无需open,但需要手动close
int pipe(int pipefd[2]);
参:
fd[0]:
fd[1]:
返回值:成功:0失败:-1,errno
  • 父子进程管道通信

管道的读写行为

  • 读管道:
    1. 管道有数据,read返回实际读到的字节数。
    2. 管道有数据
      • 无写端,read返回 0 (类似读到文件末尾)
      • 有写端,阻塞等待。
    • 有写端:
      1. 无读端,异常终止。(SIGPIPE 信号)
      2. 有读端
        • 管道已满,阻塞
        • 未满,返回实际写出的字节数。

管道的优劣

  • 优点:简单
  • 缺点:
    1. 只能单向通信,实现双向通信需要两个管道。
    2. 只能应用与父子兄弟(有公共祖先)进程间通信,无血缘关系进程间可以用 fifo 替代。

命名管道 FIFO

  • 命名创建:mkfifo 管道名。
  • 函数创建
int mkfifo(const char *pathname, mode_t mode);
  • 可以用于任意关系间通信。
  • 管道中的数据一次性读取。
  • 读端:以O_RDONLY 打开 fifo 通道。
  • 写端:以 O_WRONLY/RDWR 打开同一个管道。

mmap

文件进程间通信

  • 有血缘关系、无血缘关系的进程,都可以使用同一个文件来实现进程间通信。

建立映射

#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
参数:addr:指定映射区的首地址。通常传 NULL,表示让系统自动分配length:共享内存映射区大小(<= 文件实际大小)。prot:共享内存映射区的读写属性。PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITEflag:标注共享内存映射区的共享属性MAP_SHARED:对共享内存所作的修改,会反映到物理磁盘上,IPC 专用。MAP_PRIVATE:对共享内存做的修改,不会反映到磁盘上。fd:用来创建共享内存映射区的哪个文件的文件描述符。offset:默认0,表示映射文件全部偏移位置,必须是 4k 整数倍。
返回值:成功:映射区的首地址。失败:MAP_FAILED(void* (-1)),errno
  • munmap 释放共享内存映射
int munmap(void *addr, size_t length);1:mmap()返回值。
参2:共享内存映射区大小返回值:成功:0失败:-1,errno

mmap使用的注意事项

  1. 用于创建映射区的文件的大小必须是非 0。映射区的大小 <= 文件大小。
  2. 创建映射区,需要 read 权限。指定访问权限为 MAP_SHARED,mmap需要读写权限。应该 <= 文件权限。
  3. 文件描述符 fd,在 mmap 创建映射区完成,可以立即关闭,后续访问文件使用内存地址。
  4. offset 必须是 4096 的整数倍(MMU 映射的最小单位 4k)。
  5. 映射区访问的权限设为私有,对内存做的所有修改都只在内存有效,不反映在磁盘上。

mmap 函数保险调用方式

  1. fd = open(“filename”, O_RDWR)
  2. mmap(NULL, size of valid file, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)

进程间通信

父子间通信
  1. 父进程先创建映射区。open(O_RDWR); mmap(MAP_SHARED);
  2. fork() 创建子进程。
  3. 一个进程使用映射区读,另一个进程写。
无血缘关系进程间通信
  1. 两个进程打开同一个文件,创建映射区。
  2. 指定 flags 为 MAP_SHARED。
  3. 一个进程使用映射区读,另一个进程写。

mmap 特性

  • fifo、mmap 都可以应用于非血缘关系间通信。
    • mmap:数据可以重复读写。
    • fifo:数据只能一次性读写。
  • 直接操作内存,执行速度快

匿名映射

  • 只能应用于有血缘关系的进程间通信。
  • /dev/null:黑洞文件,无限向该文件写入数据。
  • /dev/zero:无限向该文件读取数据,读到的都是 0。
  • MAP_ANON 只在 Linux 中有效,系统中没有该选项,可以借助 /dev/zero 实现。
http://www.dtcms.com/wzjs/802800.html

相关文章:

  • 云南网站备案域名备案信息查询
  • 织梦网站图片怎么修改手机网站建设网站报价
  • 海南网络广播电视台官网网站优化工作
  • 社区app网站模板下载凡客官方网
  • 网站建设实训计划书网站域名的选择
  • 网站班级文化建设视频网站的管理
  • 网站开发需要什么专业学生什么软件可以看网站
  • 哈尔滨网站制作软件赛多利斯科学仪器北京有限公司
  • 网站都有后台吗网络规划设计师 视频 网盘
  • 最专业的营销网站建设公司哪家好什么都不懂能做电商吗
  • 网站百度收录查询河南网站建设推荐
  • 大型网站建设翻译英文王烨照片
  • 商城类网站建设步骤多媒体教学网站开发的一般步骤
  • 沭阳网站建设招聘韩雪个人网站
  • 大型论坛网站建设做网站哪便宜
  • 做暧暧视频网站在线wordpress 文章页面怎样全屏显示
  • 找人做网站网站在韩国申请网站域名需要什么
  • 购物网站网页设计wordpress文章首行
  • wordpress添加文章内容目录新乐做网站优化
  • 旅行社门店做网站嘛京东那个做快消的网站
  • 做外贸经常用的网站wordpress文章导出
  • 服装手机商城网站建设营销机构代码怎么填
  • 九江网站开发网络营销工具的作用
  • 手机端网站搭建wordpress用户注册文件
  • 怎么区分模板网站和定制网站wordpress全站静态页面
  • 国内自助建站进入兔展网站做PPt
  • 建设网站的策划书wordpress 中文优化版
  • 网站的规划建设如何布局微信小程序 模板
  • jsp网站开发书籍推荐好搜seo软件
  • 专业的app网站开发本科自考难吗