Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1710166
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 嵌入式

2018-10-07 14:24:15

一、进程和线程
进程和线程的本质区别在于:多进程中每个进程有自己的地址空间,而同一进程的多线程则共享地址空间。
进程间通信:由于每个进程有各自不同的用户地址空间,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间中拷贝到缓冲区,进程2再从缓冲区把数据读走。内核提供的这种机制就是进程间通信。
线程间通信:由于多线程共享地址空间和数据空间,所以线程间数据可以直接相互使用,而不必通过操作系统(也就是内核的调度)。线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
二者通信区别:因二者的本质区别,只有进程间需要通信,同一进程的线程共享地址空间,没有通信的必要,但要做好同步/互斥,以保护好共享全局变量。而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用

二、通信
在Linux系统中一切皆文件,管道也是一种文件(特殊文件),可以使用mkfifo命令创建一个管道文件。管道实现进程通信就是让两个进程都能访问该文件。
PIPE
  必须有“亲缘关系”的进程之间才可以使用匿名管道来完成进程间通信。父子进程当然可以,“孙子”进程也是可以的。
  其本身自带同步互斥效果。所以,也可以用于同一进程下的两个线程间的通信。
  单工模式
  实例:    linux 线程或进程之间通过管道通信(pipe)
FIFO
  可以是半双工模式,也可以是全双工模式。
阅读(3827) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~