美文网首页
队列栈堆,线程、进程、锁

队列栈堆,线程、进程、锁

作者: tkpy | 来源:发表于2017-12-14 20:09 被阅读0次

    堆、栈、队列之间的区别

    1.堆 是在程序运行时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
    2.栈 就是一个桶(先进后出),后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。堆栈就是一个特殊的栈。
    3.队列(先进先出)只能在队头做删除操作,在队尾做插入操作,而栈只能在栈顶做插入和删除操作。

    2.线程与进程

    2.1什么是线程?

    线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

    线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

    2.2什么是进程?

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。里面包含对各种资源的调用,内存的管理,网络接口的调用等。。。对各种资源管理的集合 就可以称为 进程

    2.3线程和进程的区别

    (1)线程共享内存空间;进程的内存是独立的

    (2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

    (3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

    (4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

    (5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程

    3.Python GIL(Global Interpreter Lock)

    无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行,这还叫什么多线程呀?

    需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,INTEL C++,Visual C++等。Python也一样,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行。像其中的JPython就没有GIL。然而因为CPython是大部分环境下默认的Python执行环境。所以在很多人的概念里CPython就是Python,也就想当然的把GIL归结为Python语言的缺陷。所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL

    more: http://www.dabeaz.com/python/UnderstandingGIL.pdf

    相关文章

      网友评论

          本文标题:队列栈堆,线程、进程、锁

          本文链接:https://www.haomeiwen.com/subject/amtaixtx.html