多进程和多进程间通信
来源:互联网 发布:王者荣耀自慰软件 编辑:程序博客网 时间:2024/05/21 10:40
说到子进程只是一个额外的流程,那他跟父进程的联系和区别是什么呢?
我很想建议你看看linux内核的注解(有兴趣可以看看,那里才有本质上的了解),总之,fork后,子进程会复制父进程的task_struct结构,并为子进程的堆栈分配物理页。理论上来说,子进程应该完整地复制父进程的堆,栈以及数据空间,但是2者共享正文段。
关于写时复制:由于一般 fork后面都接着exec,所以,现在的 fork都在用写时复制的技术,顾名思意,就是,数据段,堆,栈,一开始并不复制,由父,子进程共享,并将这些内存设置为只读。直到父,子进程一方尝试写这些区域,则内核才为需要修改的那片内存拷贝副本。这样做可以提高 fork的效率。
由于多进程要并发协调工作,进程间的同步,通信是在所难免的。
稍微列举一下linux常见的IPC.
linux下进程间通信的几种主要手段简介:
- 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
- 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程 本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于 BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
- 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。
- 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
- 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
- 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
或许你会有疑问,那多线程间要通信,应该怎么做?前面已经说了,多数的多线程都是在同一个进程下的,它们共享该进程的全局变量,我们可以通过全局变量来实现线程间通信。如果是不同的进程下的2个线程间通信,直接参考进程间通信。
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。
进程间通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。
使用IPC 的理由:
- 信息共享
- 加速;
- 模块化;
- 方便; 以及
- 私有权分离.
主要的 IPC 方法
方法
提供方(操作系统或其他环境)
文件
多数操作系统
信号
多数操作系统
Socket
多数操作系统
消息队列(en:Message queue)
多数操作系统
管道(en:Pipe)
所有的 POSIX systems, Windows.
具名管道(en:Named Pipe)
所有的 POSIX 系统, Windows.
信号量(en:Semaphore)
所有的 POSIX 系统, Windows.
共享内存
所有的 POSIX 系统, Windows.
Message passing(en:Message passing)
(不共享)
用于 MPI规范,Java RMI, CORBA, MSMQ, MailSlot 以及其他.
Memory-mapped file(en:Memory-mapped file)
- 多进程和多进程间通信
- 多进程编程总结[进程间通信]
- 11.进程关系和进程间通信
- 进程&进程间通信
- 多进程通信
- 多进程通信
- android多进程通信
- TCP通信,多进程
- linux多进程通信
- 多进程通信
- 多进程通信 互斥量
- Aidl多进程通信
- Linux多进程通信
- Android多进程通信
- nginx-多进程启动和通信
- 多进程间通信方式和多线程同步机制总结
- 多进程间通信方式和多线程同步机制总结
- 多进程间通信方式和多线程同步机制总结
- Matlab Newton iteration
- 啦啦
- 一个表空间offline后alert日志报ORA-01135 和ORA-01110的问题
- [draft]字符串匹配 Z_algorithm
- Java-类初始化顺序-1
- 多进程和多进程间通信
- 预写式日志相关结构体
- Spring 注解@Component,@Service,@Controller,@Repository
- pg_controldata (1)
- 深拷贝和浅拷贝(clone用法)
- pg_controldata (2)
- [翻译] 使用Apache Spark估算金融风险
- yum安装lamp环境常遇到的问题
- Cocos2d-JS中JavaScript继承