zoukankan      html  css  js  c++  java
  • c++ 后台 常备知识

    关于带缓冲的io与不带缓冲的io,此时的缓冲指应用层面的缓冲,即先写入缓冲区(用户空间),缓冲区满时执行系统调用,将数据拷贝至内核(内核缓冲区),内核缓冲区满才执行io

    即双缓冲,第一层为了减少系统调用次数,第二层为了减少io次数

    进程间通信方式

    匿名pipe,通过文件名描述符建立管道,pipe(fd),然后调用fork,通过fd来读写管道中的数据,可想而知父进程和子进程共享的东西是文件描述符

    高级pipe,pipe、fork、exe()执行其他程序,即实现两个不同程序的通信

    有名pipe,通过 int mkfifo(const char *pathname, mode_t mode); 打开一个有名管道,一旦创建有名管道后,就可以使用一般的文件操作函数操作它,即用fd=fopen(文件名),用fd读写

    消息队列,通过ftok返回一个key值:key_t ftok( char * fname, int id ),msqid = msgget(key, IPC_CREAT|0777) 创建一个消息队列msqid。客户端用ftok传入相同文件名,可活动key值

    信号量, int semget(key_t key, int num_sems, int sem_flags)

    内存映射之mmap ,通过将一段硬盘地址映射至内存,实现多进程与服务进程间的通信,容量大

    内存映射至shm,通过将一段主存空间映射至内存

  • 相关阅读:
    数据库架构的演变
    一个简单的跨库事务问题
    一个优美的架构需要考虑的几个问题
    铁道部新客票系统设计
    详细介绍软件架构设计的三个维度
    单代号网络图
    分库分表带来的完整性和一致性问题
    软件架构设计箴言理解
    设计高并发的电子商店
    mysql之索引补充
  • 原文地址:https://www.cnblogs.com/GreenScarf/p/11099620.html
Copyright © 2011-2022 走看看