Skip to content

Latest commit

 

History

History
103 lines (78 loc) · 5.32 KB

20180927.md

File metadata and controls

103 lines (78 loc) · 5.32 KB

20180927-第九期

本期内容主要包括

  1. 一个so崩溃的原因(冯树勋)
  2. TCP RTO计算(许云华)
  3. Android Camera学习(陈伟)
  4. hashmap简介(江丁魁)
  5. 抗锯齿——OpenGL多重采样(郑雨薇)
  6. iOS中常用线程同步方案(张艳强)
  7. 鉴权和登陆(张辰)
  8. linux IPC类型(许佳佳)

linux IPC类型

1、匿名管道 2、命名管道 3、信号 4、消息队列 5、共享内存 6、信号量 7、Socket

1、匿名管道

在这里插入图片描述 过程: 1、管道实质是一个内核缓冲区,先进先出(队列)读取缓冲区内存数据 2、一个数据只能读一次,读完后在缓冲区就不存在了。 3、当缓冲区读空或者写满时,相应的读进程或者写进程会进入等待队列,在有新数据写入或者有数据被读出来时,就唤醒等待队列中的进程。

特点: 1、只支持单向数据流(两个进程如果要双向读写,需要创建两个管道) 2、只能用于具有亲缘关系的进程之间 3、缓冲区大小有限 4、传输的是无格式字节流,收发方需要约定格式。 5、内容都存于内存中。

2、命名管道

过程和匿名管道类似。 它提供了一个路径名与之关联,以有名管道的文件形式存在于文件系统中,这样,即使与有名管道的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过有名管道相互通信。

特点: 1、只支持单向数据流 2、能用于任意两个进程之间通信(和匿名管道区别) 3、缓冲区大小有限 4、传输的是无格式字节流,收发方需要约定格式。 5、有名管道的名字存在于文件系统中,内容存放在内存中。(和匿名管道区别)

3、信号

信号是软件层次上对中断机制的一种模拟,是一种异步通信方式,信号可以在用户空间进程和内核之间直接交互,内核可以利用信号来通知用户空间的进程发生了哪些系统事件,信号事件主要有两个来源: 1、硬件来源:用户按键输入Ctrl+C退出、硬件异常如无效的存储访问等。 2、软件终止:终止进程信号、其他进程调用kill函数、软件异常产生信号。

Linux系统中常用信号:
(1)SIGHUP:用户从终端注销,所有已启动进程都将收到该进程。系统缺省状态下对该信号的处理是终止进程。
(2)SIGINT:程序终止信号。程序运行过程中,按Ctrl+C键将产生该信号。
(3)SIGQUIT:程序退出信号。程序运行过程中,按Ctrl+\\键将产生该信号。
(4)SIGBUS和SIGSEGV:进程访问非法地址。
(5)SIGFPE:运算中出现致命错误,如除零操作、数据溢出等。
(6)SIGKILL:用户终止进程执行信号。shell下执行kill -9发送该信号。
(7)SIGTERM:结束进程信号。shell下执行kill 进程pid发送该信号。
(8)SIGALRM:定时器信号。
(9)SIGCLD:子进程退出信号。如果其父进程没有忽略该信号也没有处理该信号,则子进程退出后将形成僵尸进程。

4、消息队列

消息队列是存放在内核中的消息链表。进程可以通过发送消息和接收消息来进程通信,同样遵守先进先出的原则。 类比于,ios中dispatch的queue,android中MessageQueue。

特点: 1、消息队列也独立于发送和接收进程而存在。可以多个进程之间通信。 2、避免管道的同步和阻塞问题,不需要进程自己来控制同步操作。 3、接收程序可以通过消息类型有选择地接收数据,而不是像命名管道中那样,只能默认地先进先出的接收。

5、共享内存

为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。

特点: 1、是最快的可用IPC形式,是针对其他通信机制运行效率较低而设计的。 2、由于多个进程共享一段内存,因此需要依靠某种同步机制(如信号量)来达到进程间的同步及互斥。

6、信号量

信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。 为了获得共享资源,进程需要执行下列操作: (1)创建一个信号量: 这要求调用者指定初始值,对于二值信号量来说,它通常是1,也可是0。 (2)等待一个信号量: 该操作会测试这个信号量的值,如果小于0,就阻塞。也称为P操作。 (3)挂出一个信号量: 该操作将信号量的值加1,也称为V操作。

信号量与互斥量之间的区别: 互斥量值只能为0/1,信号量值可以为非负整数。 也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。

7、Socket

在这里插入图片描述