进程与线程,堆与栈

进程与线程

对于操作系统来说,一个任务就是一个进程(Process),其中的“子任务”称为线程(Thread)。
在运行中,多个线程共享进程的资源,进程是资源分配的基本单位,线程是独立运行和调度的基本单位。
进程之间是相互独立的,而线程之间没有单独的地址空间,一个线程死掉等于整个进程死掉。

Python的多进程/多线程实现:

  1. 多进程的程序可以用multiprocessing模块,它提供了一个Process类来代表一个进程对象。如果要启动多个子进程,可以使用Pool的方式来批量创建子进程。
  2. 多任务可以由多进程完成,也可以由一个进程内的多线程完成。python的线程可以用threading模块实现。但在多线程中,所有变量是由所有线程共享的,而多进程中变量是互不影响的。此外,由于python的GIL锁(Global Interpreter Lock),多线程并不能有效利用多核,多核人物需要用多进程实现。

堆与栈

  1. 栈(stack)像一个装数据的桶,后存放的先取,先存放的后取。它是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的
    空间分配是由操作系统自动分配释放且自动回收,存放函数的参数值,局部变量的值等。所以栈数据的生存周期只在函数的运行过程中,运行后就释放掉,不可以再访问。
  2. 堆(heap)像一棵倒过来的树,是一个经过排序的树形数据结构,每个结点都有一个值。它是一种运算受限的线性表。堆的存取是随意的。
    空间分配一般由程序员分配释放,若程序员不释放,程序结束时可能由os回收。

参考:
http://www.cleey.com/blog/single/id/776.html
https://www.jianshu.com/p/52b5a1879aa1
https://buptjz.github.io/2014/04/23/processAndThreads

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/tangsl(简书作者) 原文链接:http://www.jianshu.com/p/2b993a4b913e...
    西葫芦炒胖子阅读 9,196评论 0 5
  • PHP是单线程,还是多线程的呢?PHP是多进程,还是多线程的呢?...解决这些问题,首先必须先了解线程和进程。 备...
    JunChow520阅读 6,057评论 1 3
  • 进程与线程 进程(Process)和线程(Thread)都是操作系统中的基本概念,它们之间有一些优劣和差异。 1....
    0893051f5f11阅读 3,365评论 1 1
  • 进程 进程 进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程,进程是程序资源管理的最小单位。 进程管理的...
    睡不醒的大橘阅读 5,316评论 0 1
  • (1) 进程与线程区别?进程是并发执行的程序在执行过程中分配和管理资源的基本单位,一个动态概概念,是竞争计算机资源...
    Lee_Lemon阅读 3,899评论 0 1