进程、线程、协程基本概念理解

概述

    最近接触一些进程、线程、协程、相关的东西,老是容易搞混淆,或者出错,专门想总结下这块的几个概念的问题! html

进程

  • 进程之间不共享任何状态
  • 进程的调度由操做系统完成
  • 每一个进程都有本身独立的内存空间
  • 进程间通信主要是经过信号传递的方式来实现的,实现方式有多种,信号量、管道、事件等,任何一种方式的通信效率都须要过内核,致使通信效率比较低
  • 因为是独立的内存空间,上下文切换的时候须要保存先调用栈的信息、cpu各寄存器的信息、虚拟内存、以及打开的相关句柄等信息,因此致使上下文进程间切换开销很大,通信麻烦。 spa

线程

  • 线程之间共享变量,解决了通信麻烦的问题
  • 对于变量的访问须要锁
  • 线程的调度主要也是有操做系统完成
  • 一个进程能够拥有多个线程,可是其中每一个线程会共享父进程像操做系统申请资源,这个包括虚拟内存、文件等,因为是共享资源,因此建立线程所须要的系统资源占用比进程小不少,相应的可建立的线程数量也变得相对多不少。
  • 线程时间的通信除了可使用进程之间通信的方式之外还能够经过共享内存的方式进行通讯,因此这个速度比经过内核要快不少。
  • 另外在调度方面也是因为内存是共享的,因此上下文切换的时候须要保存的东西就像对少一些,这样一来上下文的切换也变得高效。 操作系统

协程

  • 协程的调度彻底由用户控制
  • 一个线程能够有多个协程,用户建立了几个线程,而后每一个线程都是循环按照指定的任务清单顺序完成不一样的任务,当任务被堵塞的时候执行下一个任务,当恢复的时候再回来执行这个任务,
  • 任务之间的切换只须要保存每一个任务的上下文内容,就像直接操做栈同样的,这样就彻底没有内核切换的开销
  • 能够不加锁的访问全局变量,因此上下文的切换很是快;
  • 另外协程还须要保证是非堵塞的且没有相互依赖,协程基本上不能同步通信,多采用一步的消息通信,效率比较高。

-------------------------------------------------- 线程

注: orm

一、在阮一峰老师的博客中关于进程、线程的简单解释:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 协程

相关文章
相关标签/搜索