python中的线程和进程的理解

 转载链接

http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

 

调度

在传统的计算机操作系统中,CPU调度的基本单位是进程。后来操作系统普遍引入了线程的概念,线程成为了CPU调度的基本单位,进程只能作为资源拥有的基本单位。

并行

由于线程的引入,原先一个进程只能有一个并发,现在一个进程可以有多个线程并行执行。早期的很多HTTP server都是通过线程来解决服务器的并发,比起之前用fork子进程来处理并发效率有了数倍的提升。这一切都得益于线程可以用进程更低的代价实现并发。

共享资源

下图用来说明线程和进程之间共享资源的情况。

 

python中的线程和进程的理解

  • 进程的公有数据段内存(利用这些共享的数据,线程很容易的实现相互之间的通讯)
  • 进程打开的FD(File Descriptor,文件描述符)
  • 信号的处理器
  • 进程用户ID(UID)与进程组ID(PGID)

隔离

Linux的线程会独立拥有如下资源(非共享):

  • 线程ID,在Linux中线程和进程共享ID空间,在UNIX系统中线程的ID是和进程ID不同层面的概念
  • 寄存器的值,这其实就是线程能作为独立调度单元的最必要的保证
  • 线程的栈,这是线程能并行运行的保证
  • 优先级,Linux的系统设计使得线程和进程除了在某些资源的共享&隔离有差异之外, 几乎是一视同仁的,所以他们可以有不同的priority。