进程间通信和多线程通信的区别整理

一、进程和线程

(1)进程:进程是资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。

(2)线程:程序执行的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。一个进程中可以有多个线程,它们共享进程资源。

它们之间根本区别在于多进程中每个进程有自己的地址空间,线程则共享地址空间。所有其他区别都是因为这个区别产生的。比如说:

  1)速度上, 线程产生的速度快,通讯快,切换快。

  2)线程的资源利用率好。

  3)线程使用公共变量或者内存的时候需要同步机制,但进程不用。

(3)进程和线程的关系

  1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

  2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

  3)处理机分给线程,即真正在处理机上运行的是线程。

  4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

(4)线程与进程的区别

  1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

  2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行

  3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

  4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

二、通信方式

(1)进程间的通信方式:

  1)管道(pipe)及有名管道(named pipe):

  管道可用于具有亲缘关系的父子进程间的通信;有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

  2)信号(signal):

  信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。

  3)消息队列(message queue):

  消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。

  4)共享内存(shared memory):

  可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。

  5)信号量(semaphore):

  主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。

  6)套接字(socket);

  这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。

(2)多线程的通信/同步方式:

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

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

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

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

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

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

posted @ 2021-07-20 22:17  Jcpeng_std  阅读(425)  评论(0编辑  收藏  举报