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

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

3天内不再提示

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

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

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

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

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

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

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

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

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

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

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

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

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

一、进程间的通信方式

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

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

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

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

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

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

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

二、线程间的通信方式

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

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

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

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

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

    关注

    18

    文章

    6084

    浏览量

    136536
  • 线程
    +关注

    关注

    0

    文章

    507

    浏览量

    19767

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

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

收藏 人收藏

    相关推荐

    Linux下进程通信方式-管道

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

    Linux下进程通信

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

    Linux多线程线程同步

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

    进程通信方式有哪些?

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

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

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

    c线程通信

    对于学习嵌入式Linux开发得朋友说,这篇文章帮助你更加了解线程通信
    发表于 08-09 15:12 3次下载

    了解Linux多线程线程同步

    进程通信IPC,线程可以直接读写进程数据段(如全局变量)来进行
    发表于 04-23 14:23 749次阅读
    了解Linux多<b class='flag-5'>线程</b>及<b class='flag-5'>线程</b><b class='flag-5'>间</b>同步

    Linux进程通信方式——管道

    管道是Linux中进程通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入。Linux的管道主要包括两种:无名管道和有名管道。
    发表于 06-01 09:13 1490次阅读
    Linux<b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>——管道

    使用MQTT作为进程通信方式

    小编对Linux这一块的实际开发经验虽然还不是很足,但也知道进程通信有那么几种方式:管道、消息队列、共享内存、套接字等。
    的头像 发表于 10-22 12:09 6281次阅读
    使用MQTT作为<b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>的<b class='flag-5'>方式</b>

    RT-Thread文档_线程通信

    RT-Thread文档_线程通信
    发表于 02-22 18:29 0次下载
    RT-Thread文档_<b class='flag-5'>线程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>

    进程通信的机制有哪些

    比较难,Linux内核提供了多种进程通信的机制。 同一个进程的不同模块(譬如不同的函数)之间进行通信都是很简单的,譬如使用全局变量等。 通
    的头像 发表于 07-21 11:23 1012次阅读
    <b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>的机制有哪些

    常见的进程通信方式

    进程通信 如果两个进程,想要知道对方在干嘛,或者进行协调运行,就需要进程
    的头像 发表于 10-08 15:48 1421次阅读
    常见的<b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>

    进程通信方式总结

    进程通信(IPC): 进程通信方式有很多,这里
    的头像 发表于 11-09 09:25 832次阅读
    <b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>总结

    进程通信的原理

    一.为什么进程需要通信? 1).数据传输 一个进程需要将它的数据发送给另一个进程; 2).资源共享 多个
    的头像 发表于 11-10 17:05 1250次阅读
    <b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>的原理

    进程通信的消息队列介绍

    消息队列是一种非常常见的进程通信方式
    的头像 发表于 04-08 17:27 355次阅读