0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

进程间与线程间的通信方式

Dbwd_Imgtec 来源:未知 作者:李倩 2018-04-09 15:58 次阅读

每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。

同一进程中的线程因属同一地址空间,可直接通信。

不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。

线程也被称为轻权进程,同一进程的线程共享全局变量和内存,使得线程之间共享数据很容易也很方便,但会带来某些共享数据的互斥问题。

许多程序为了提高效率也都是用了线程来编写。

父子进程的派生是非常昂贵的,而且父子进程的通讯需要ipc或者其他方法来实现,比较麻烦。而线程的创建就花费少得多,并且同一进程内的线程共享全局存储区,所以通讯方便。

线程的缺点也是由它的优点造成的,主要是同步,异步和互斥的问题,值得在使用的时候小心设计。

只有进程间需要通信,同一进程的线程share地址空间,没有通信的必要,但要做好同步/互斥mutex,保护共享的全局变量。线程拥有自己的栈。同步/互斥是原语primitives.

而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用.

线程间通信:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以直接提供给其他线程使用,而不必通过操作系统(也就是内核的调度)。

进程间的通信则不同,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。以前进程间的通信只能是单机版的,现在操作系统都继承了基于套接字(socket)的进程间的通信机制。这样进程间的通信就不局限于单台计算机了,实现了网络通信

一、进程间的通信方式

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

套接字(socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

二、线程间的通信方式

锁机制:包括互斥锁、条件变量、读写锁* 互斥锁提供了以排他方式防止数据结构被并发修改的方法。* 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。* 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

信号量机制(Semaphore):包括无名线程信号量和命名线程信号量

信号机制(Signal):类似进程间的信号处理

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    5675

    浏览量

    134118
  • 线程
    +关注

    关注

    0

    文章

    484

    浏览量

    19467

原文标题:线程通信与进程通信的区别

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    线程编程之三 线程通讯

    线程通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明。使用全局变量进行通信由于属于同一个
    发表于 10-22 11:43

    Linux下进程通信方式-管道

    Linux下进程通信方式-管道分享到: 本文关键字: linux 管道通信,linux 进程
    发表于 08-29 15:29

    Linux下进程通信

    华清远见嵌入式linux学习资料《Linux下进程通信》,通过前面的学习,读者已经知道了进程是一个程序的一次执行,是系统资源分配的最小单元。这里所说的
    发表于 09-04 10:07

    Linux进程通信——使用共享内存

    Linux进程通信——使用共享内存 图文详情见附件
    发表于 11-21 10:53

    Linux多线程线程同步

    进程所花费的空间,而且,线程彼此切换所需的时间也远远小于进程切换所需要的时间。 线程
    发表于 12-08 14:14

    进程通信

    相信不管是学习嵌入式的还是单片机的进程通信都是需要学习的,找到的这个资料不错,至于是哪的还是老规矩 我就不说了避嫌 想看的自己看
    发表于 11-14 16:52

    进程通信的分类及机制中的数据结构

      进程通信就是在不同进程之间传播或交换信息,进程控制信息的交换称为低级
    发表于 08-05 08:09

    IOT-OS之RT-Thread--- 线程同步与线程通信

    rt_thread,下面要介绍线程的同步与通信线程同步对象rt_sem / rt_mutex / rt_event和
    发表于 07-02 06:15

    Linux现有的所有进程IPC方式

    在开始回答前,先简单概括性地说说Linux现有的所有进程IPC方式:1. **管道:**在创建时分配一个page大小的内存,缓存区大小比较有限;2. 消息队列:信息复制两次,额外的CPU消耗
    发表于 08-20 06:17

    常用的进程通信主要有哪几种方式

    ;常用的进程通信主要有以下几种方式:1.消息队列;2. socket(本地socket和INETsocket)3.管道(有名管道和无名管道)4.信号5.共享内存以上5中
    发表于 11-08 07:38

    进程通信方式有哪些?

    进程通信方式有哪些?
    发表于 12-24 06:46

    哪些方式可以实现Linux系统下的进程通信

    哪些方式可以实现Linux系统下的进程通信进程线程有哪些不同之处呢?
    发表于 12-24 06:38

    Hi3516的SAMGR--系统服务框架子系统-7-线程/进程通信模型

    外部进程提供服务,那就不可避免要跨进程进行通信和API的调用。进程通信小型系统和标准系统中,
    发表于 04-21 10:36

    RT-thread内核之进程通信设计实现

    1、RT-thread内核之进程通信特性及使用场合介绍  rt-thread操作系统的IPC(Inter-ProcessCommunication,进程
    发表于 09-01 15:13

    线程进程的区别和联系,线程进程通信方式

    摘要:进程线程都是计算里的两项执行活动,各有特色和优势。下面就来介绍线程进程之间的区别联系以及通信
    发表于 12-08 14:12 1.2w次阅读