线程、进程、协程(多进程,多线程)

关于进程间通讯pipe,内存共享mmap的详细介绍

进程

进程是程序的一次执行过程,是一个动态概念,是程序在执行过程当中分配和管理资源的基本单位,每个进程都有一个本身的地址空间,至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。html

线程

线程是CPU调度和分派的基本单位,它可与同属一个进程的其余的线程共享进程所拥有的所有资源。多线程

协程

协程,是一种比线程更加轻量级的存在,协程不是被操做系统内核所管理,而彻底是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能获得了很大的提高,不会像线程切换那样消耗资源。协程在子程序内部是可中断的,而后转而执行别的子程序,在适当的时候再返回来接着执行。并发

并发

并发:在操做系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥异步

互斥

互斥:进程间相互排斥的使用临界资源的现象,就叫互斥分布式

同步

同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出做为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具备同步关系的一组并发进程相互发送的信息称为消息或事件。其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。性能

并行

并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不只能够交替执行,并且能够重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具备并发的含义,但并发不必定并行,也亦是说并发事件之间不必定要同一时刻发生。操作系统

异步

异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,须要等待、协调运行。异步就是彼此独立,在等待某事件的过程当中继续作本身的事,不须要等待这一事件完成后再工做。线程就是实现异步的一个方式。异步是让调用方法的主线程不须要同步等待另外一线程的完成,从而可让主线程干其它的事情。
异步和多线程并非一个同等关系,异步是最终目的,多线程只是咱们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而能够作其它的事情。实现异步能够采用多线程技术或则交给另外的进程来处理。.net

进程和线程

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。
  • 进程有本身的独立地址空间,每启动一个进程,系统就会为它分配地址空间,创建数据表来维护代码段、堆栈段和数据段。而线程是共享进程中的数据的,使用相同的地址空间,所以CPU切换一个线程的花费远比进程要小不少,同时建立一个线程的开销也比进程要小不少。
  • 线程之间的通讯更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通讯须要以通讯的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
  • 可是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另一个进程形成影响,由于进程有本身独立的地址空间。

协程和线程

  • 极高的执行效率:由于子程序切换不是线程切换,而是由程序自身控制,所以,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优点就越明显;
  • 不须要多线程的锁机制:由于只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只须要判断状态就行了,因此执行效率比多线程高不少。

线程间的通讯方式

  • 使用全局变量
  • 锁机制:包括互斥锁、条件变量、读写锁
  • 信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
  • 信号机制(Signal):相似进程间的信号处理

线程间的同步方式

  • 临界区(Critical Section)、互斥对象(Mutex):主要用于互斥控制;都具备拥有权的控制方法,只有拥有该对象的线程才能执行任务,因此拥有,执行完任务后必定要释放该对象。
  • 信号量(Semaphore)、事件对象(Event):事件对象是以通知的方式进行控制,主要用于同步控制!

进程间的通讯方式

  • 管道(PIPE):管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,而且管道缓冲区的大小是有限的(管道缓冲区存在于内存中,在管道建立时,为缓冲区分配一个页面大小)。
  • 有名管道 (FIFO): 有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间的通讯。
  • 信号(Signal): 信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生。
  • 信号量(Semaphore):信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。
  • 消息队列(Message Queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 共享内存(Shared Memory ):共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的 IPC 方式,它是针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号量,配合使用,来实现进程间的同步和通讯。
  • 套接字(Socket): 套解口也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样主机间的进程通讯。

多进程与多线程

  • 多进程模型的优点是CPU
  • 多线程模型主要优点为线程间切换代价较小,所以适用于I/O密集型的工做场景,所以I/O密集型的工做场景常常会因为I/O阻塞致使频繁的切换线程。同时,多线
    程模型也适用于单机多核分布式场景。
  • 多进程模型,适用于CPU密集型。同时,多进程模型也适用于多机分布式场景
    中,易于多机扩展。
  • (1)线程执行开销小,但不利于资源管理和保护;进程则相反,进程可跨越机器迁移。线程

    (2)多进程时每一个进程都有本身的内存空间,而多线程间共享内存空间;设计

    (3)线程产生的速度快,线程间通讯快、切换快;

    (4)线程的资源利用率比较好;

    (5)线程使用公共变量或者资源时须要同步机制。

参考连接:

【1】https://www.jianshu.com/p/354066717f78

【2】http://www.noobyard.com/article/p-xlstevri-bx.html

【3】https://blog.csdn.net/qq_32621445/article/details/78635951

【4】http://blog.sina.com.cn/s/blog_bf63e2650102xcu6.html

【5】http://www.noobyard.com/article/p-sywmczdi-kd.html

【6】http://www.noobyard.com/article/p-wkgbkdwv-dg.html

【7】https://blog.csdn.net/N1314N/article/details/93711852

【8】https://zhuanlan.zhihu.com/p/34016871