Process VS Thread

要实现多任务,通常我们会涉及Master-Worker模式,Master负责分配任务,Worker负责执行任务,一个Master,多个Worker。

multi-process:

  • 最大优点是稳定性高,因为一个子进程崩溃了不会影响主进程和其他进程。
  • 缺点是创建进程的代价大,unix/linux海星,windows的开销巨大
  • example: apache

multi-thread:

  • 通常比multi-process快一点,但也快不到哪去
  • 缺点是任何一个thread出问题都会导致整个进程crash
  • example: windows IIS

进程切换

无论是Multi-process还是multi-thread,只要数量多了,效率都上不去

因为切换的过程就会消耗非常多的资源

计算密集型 VS IO密集型

计算密集型

需要进行大量的计算,消耗CPU资源,比如计算pi, 视频高清解码等,全靠CPU的能力。高效地利用CPU应该使同事进行的任务数量等于CPU的核心数

代码运行效率非常重要,python这样的script language不适合,最好用C

IO密集型

涉及web, disk的大部分都是,CPU消耗很少,大部分时间在等待IO操作,任务越多,cpu效率一般越高。

大部分时间花在IO上,所以没必要使用C这样的语言,应该使用开发效率最高的语言。

异步IO

单进程单线程, 事件驱动型。比如Nginx服务器, nodejs框架等等