20.进程与线程通信方式之间的差异

原创 2018年04月16日 15:36:45

进程线程通信方式之间的差异

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

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

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

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

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

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

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

只有进程间需要通信,同一进程的线程share地址空间,没有通信的必要,但要做好同步/互斥mutex,保护共享的全局变量。线程拥有自己的栈。同步/互斥是原语primitives.
而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用.

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

进程间的通信则不同,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。

以前进程间的通信只能是单机版的,现在操作系统都继承了基于套接字(socket)的进程间的通信机制。这样进程间的通信就不局限于单台计算机了,实现了网络通信。

一、进程间的通信方式

进程间的通信,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。以前进程间的通信只能是单机版的,现在操作系统都继承了基于套接字(socket)的进程间的通信机制。这样进程间的通信就不局限于单台计算机了,实现了网络通信。
   
进程的通信机制主要有:管道、有名管道、信号、信号量、消息队列、共享内存、套接字。

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
#
有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知
# 信号量
(semophore ): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
#
套接字(socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它实现了实现了网络通信

二、线程间的通信方式

1.    锁机制:包括互斥锁、条件变量、读写锁 

1.    互斥锁提供了以排他方式防止数据结构被并发修改的方法。

2.    读写锁允许多个线程同时读共享数据,而对写操作是互斥的。

3.    条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

2.    信号量机制(Semaphore):包括无名线程信号量和命名线程信号量 
信号机制(Signal):类似进程间的信号处理

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

版权声明:本博客为记录本人JAVA自学之路而开,内容大多从网上学习与整理所得,若侵权请告知! https://blog.csdn.net/u014590757/article/details/79961407

线程通信和进程通信区别(线程进程区别)

前言:腾讯笔试中多道选择题考到这个问题,这里总结一下。学习Java的童鞋可能对于线程的理解要比学php好很多。本文参考于线程通信与进程通信的区别 。 进程和线程的区别:对于进程来说,子进程是父进程的...
  • Return_True_hang
  • Return_True_hang
  • 2017-04-08 10:37:36
  • 1642

Linux的进程/线程间通信方式总结

Linux系统中的进程通信方式主要以下几种: 同一主机上的进程通信方式    * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal)    * Sy...
  • kobejayandy
  • kobejayandy
  • 2014-01-29 16:10:24
  • 22241

进程间、线程间通信方式小结

之前一直对进程间和线程间的通信方式搞混,今天对它们总结一下。 一、进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。...
  • Alexlee1986
  • Alexlee1986
  • 2014-03-14 10:40:04
  • 53476

学习笔记--进程及线程间通信方式的区别及联系

1、进程、线程通信概念: (1)进程用户空间是相互独立的,一般而言是不能相互访问的,唯一的例外是共享内存区、 内核空间、以及可以访问的外设,所以不管是进程和线程都是需要通信的。 (2)进程通信要解...
  • zdplife
  • zdplife
  • 2015-09-15 18:55:10
  • 2490

linux进程和线程之间通信方法和同步方法总结

linux进程和线程之间通信方法和同步方法总结; 共享内存,消息队列,管道; 信号量,互斥锁,条件变量,读-写锁...
  • Linux_ever
  • Linux_ever
  • 2015-12-18 21:43:13
  • 1269

进程间的几种通信方式的比较和线程间的几种通信方式

近日想总结下进程间,线程间的通信方式,在网上搜索了下,感觉写的很好,照搬过来,当做加深记忆。 几种进程间的通信方式 (1) 管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能...
  • yang_teng_
  • yang_teng_
  • 2016-11-24 20:42:50
  • 9474

Android进程间通信和线程间通信

进程间和线程间通信这个知识点算是高级知识点,线程和进程首先要区分线程和进程的区别: 线程是cup最小调度单元; 进程是一系列线程的集合。进程间方式 Bundle 文件共享 AIDL Messeng...
  • u011072613
  • u011072613
  • 2017-02-28 16:36:41
  • 1429

JAVA线程间通信的几种方式

今天在群里面看到一个很有意思的面试题: “编写两个线程,一个线程打印1~25,另一个线程打印字母A~Z,打印顺序为12A34B56C……5152Z,要求使用线程间的通信。” 这是一道非常好的面试题...
  • hmiter
  • hmiter
  • 2017-03-03 10:10:59
  • 3035

Linux下c开发之——线程间通信

1.Linux“线程”      进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而...
  • u014306995
  • u014306995
  • 2016-02-18 17:50:42
  • 3228

进程之间、线程之间的通信方式总结

1、线程之间的通信方式有:锁机制(互斥锁、条件变量、读写锁)、信号量、消息队列、事件、全局变量2、进程之间的通信方式有:管道、信号量、消息队列、条件变量、共享内存、套接字(socket)在万能百度可以...
  • qq_33098039
  • qq_33098039
  • 2017-09-20 09:30:28
  • 221
收藏助手
不良信息举报
您举报文章:20.进程与线程通信方式之间的差异
举报原因:
原因补充:

(最多只允许输入30个字)