进程与线程的区别? 进程间通讯与线程间通讯

要理解进程与线程先来看多任务机制:web

  1. 多任务处理机制是指用户能够在同一时间内运行多个应用程序,每一个正在执行的应用程序被称为一个任务。多任务操做是系统使用某种调度(shedule)支持多个任务并发执行,多任务操做系统一般有三个基本概念:任务、进程和线程浏览器

  2. 进程的基本概念:进程是指一个具备独立功能的程序在某个数据集合上的动态执行过程,它是操做系统进行资源分配的基本单元。简单的说,进程是一个程序的一次执行过程。例如打开一个Windows资源管理器是在执行一次进程,运行一个浏览器阅读Web网页也是在执行一次进程。进程具备并发性、动态性、交互性和独立性等重要特性。
    进程和程序的区别程序是一段静态的代码,是一段指令和数据的有序集合,没有任何执行的概念,程序是永久的、静态的。进程是一个动态的概念,它是程序的一次执行过程(在RAM上执行),包括了动态建立、调度、执行和消亡的整个过程,它是程序执行和资源分配的最小单位,进程是暂时的、动态的。网络

  3. 线程的基本概念:一般线程是指共享相同地址空间的多个任务。线程最大的特色就是在同一个进程中建立的线程共享该进程的地址空间,线程和进程都参与统一调度。多线程的优势体现于:①大大提升任务切换的效率;②线程间通讯方便,由于在同一块地址空间数据共享。缺点:由于共享地址空间,若是其中一个线程出错,整个线程都会崩溃。多线程

  4. 归纳进程与线程之间的区别
    根本区别:进程是操做系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
    开销方面:每一个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程能够看作轻量级的进程,同一类线程共享代码和数据空间,每一个线程都有本身独立的运行栈和程序计数器(PC),线程之间切换的开销小。
    所处环境:在操做系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(经过CPU调度,在每一个时间片中只有一个线程执行)。
    内存分配方面:系统在运行的时候会为每一个进程分配不一样的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
    包含关系:没有线程的进程能够看作是单线程的,若是一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,因此线程也被称为轻权进程或者轻量级进程。并发

进程间通讯
每一个进程各自有不一样的用户地址空间,任何一个进程的全局变量在另外一个进程中都看不到,因此进程之间交换数据要靠内核,在内核中开辟一块缓冲区,进程1把数据从用户空间复制到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通讯(InterProcess Communication,IPC)。
使用较多的进程间通讯的方式主要有如下几种:
管道(Pipe)及有名管道(Named Pipe)。管道可用于具备亲缘关系进程间的通讯,有名管道,除了具备管道所具备的功能外,它还容许无亲缘关系进程间的通讯。
共享内存(Shared Memory)。能够说这是最有用的进程间通讯方式。它使得多个进程能够访问同一块内存空间,不一样进程能够及时看到对方进程中对共享内存中数据的更新。这种通讯方式须要依靠某种同步机制,如互斥锁和信号量等。
消息队列(Message Queue)。消息队列是消息的连接表,包括Posix消息队列和SystemV消息队列。它克服了前两种通讯方式中信息有限的缺点,具备写权限的进程能够按照必定的规则向消息队列中添加新的信息;对消息队列有读权限的进程能够从中读取消息。
信号(Signal)。信号是在权健层次上对中断机制的一种模拟,它是比较复杂的通讯方式,用于通知进程有某时间发生,一个进程接收到一个信号与处理器收到一个中断请求效果上能够说是同样的。
信号量(Semaphore)。其主要做为进程之间以及同一进程的不一样线程之间的同步和互斥手段。
套接字(Socket)。这是一种更为通常的进程间通讯机制,它可用于网络中不一样机器之间的进程间通讯,应用很是普遍。svg

线程间通讯:(线程间通讯参考:https://blog.csdn.net/liubing8609/article/details/81700284)
线程间通讯经常使用的方法有以下三种:
全局变量。因为属于同一个进程的各个线程共享操做系统分配该进程的资源,故解决线程间通讯最简单的一种方法是使用全局变量。对于标准类型的全局变量,咱们建议使用volatile修饰符,它告诉编译器无需对该变量做任何的优化,即无需将它放到一个寄存器中,而且该值可被外部改变。
参数传递方式。该方式是线程通讯的官方标准方法,多数状况下,主线程建立子线程并让其子线程为其完成特定的任务,主线程在建立子线程时,能够经过传给线程函数的参数和其通讯。
Message消息机制。经常使用的Message通讯的接口主要有两个:PostMessagePostThreadMessage。PostMessage为线程向主窗口发送消息,而PostThreadMessage是任意两个线程之间的通讯接口。
线程同步法。还能够经过线程同步来实现线程间通讯。例若有两个线程,线程A写入数据,线程B读出线程A准备好的数据并进行一些操做。这种状况下,只有当线程A写好数据后线程B才能读出,只有线程B读出数据后线程A才能继续写入数据,这两个线程之间须要同步进行通讯。关于线程同步的方法和控制是编写多线程的核心和难点,方法也比较多。函数