Python中的多线程基础

一.进程与线程

1.进程:计算机程序是存储在磁盘里面的可执行二进制文件,只有把它加载到内存里面才能被操作系统执行,才拥有生命周期。进程(有时称为重量级进程)是一个执行中的程序。每个进程拥有自己的地址空间,内存,数据栈以及其他用于跟踪执行的辅助数据。操作系统管理其上所以的线程的执行,并为这些线程合理地分配时间。(摘自《Python核心编程(第三版)》)

2.线程:与进程类似,不过它们是在同一个进程下执行的,并共享相同的上下文。线程包括开始,执行顺序和结束三个部分。它有一个指令指针,用于记录当前运行的上下文。当其他线程运行时,它可以被抢占(中断)和临时挂起(睡眠),这又叫让步(yielding)。(摘自《Python核心编程(第三版)》)

3.线程与进程的关系:引用知乎上的一句话——进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。线程是建立在进程的基础上的一次程序运行单位,一个进程中的各个线程与主线程共享一片数据空间,因此相对与独立的进程来说,线程间的数据共享与通信更加容易。线程一般是以并发的方式执行的,正是由于这种并行和数据共享机制,让多任务间协作成为可能。当然这种共享是有风险的,如果两个线程或多个线程访问同一片数据,由于访问顺序不同,可能导致结果不同,这种情况通常成为竟态条件(race condition)。还有一个问题需要注意,线程无法给予公平的执行时间。这是因为一些函数会在完成前保存阻塞状态,如果没有专门为多线程情况进行修改,会导致cpu的时间分配向这些贪婪的函数倾斜。

二.Python中的多线程

1.Pythond特殊的并发特性:python的代码的执行是由Python虚拟机(又称解释器主循环)进行控制的。Python在设计时是这么考虑的,在主循环中同时只能有一个控制线程在执行,就像单核CPU系统中的多线程一样。内存可以有许多程序,但在任意时刻只能有一个进程在运行。

2.全局解释器锁(GIL):对python虚拟机的访问是由全局解释器锁控制的。这个锁就是来保证同时只能有一个线程运行的。在多线程环境下,python虚拟机按以下方式执行:

    1).设置GIL。

    2).切换进一个进程去运行。

    3).执行下面两个操作之一:a.指定数量的字节码指令;b.线程主动让出控制权(可以调用time.sleep()来完成)。

    4).把线程设置会睡眠状态(切换出线程)。

    5).解释GIL。

    6).重复上述过程。

PS:调用外部代码时(即任意c/c++扩展的内置函数),GIL会保持锁定,直到函数调用完毕。(摘自《Python核心编程(第三版)》)

三,线程间的通信用语(个人理解)

1.同步:由于线程间可能访问同一片内存区域或文件或数据等,如果同时进行读或写就会发生冲突,因此需要按照一定顺序来安排线程的运行。“线程同步”,通俗点讲,就是让线程排队,一个执行完再运行下一个。

2.异步:多个线程同时一起运行,互不干扰。

3.阻塞:一个主线程在运行时,需要停下来等待子线程返回,则说这个子线程是阻塞的。

4.非阻塞:主线程能够持续地运行而不用等待子线程返回,而是互相独立地运行,则称子线程是非阻塞的。

5.守护进程:对于一般线程,进程会等待一般线程结束后才结束,而对于守护线程,主线程运行完后会直接结束,不管子线程是否还在工作,进程退出后,子线程也自然会退出。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,533评论 0 5
  • 进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。以前进程既是资源分配也是调度的最小单位,后来为了更合理...
    nine_9阅读 627评论 0 1
  • 马克·吐温曾经说过:“十九世纪有两奇人,一个是拿破伦,一个就是海伦·凯勒。”最近我读了一本关于海伦的书——《假...
    梦幻LL阅读 273评论 1 0
  • 人生就是一个前进的过程,有了第一次兼职史以后,很快我就迫切拥有第二次了。 真正意义上的第二次应该是在江安的那段日子...
    tisture阅读 656评论 9 13
  • 「七种武器」对于古龙来说,是创新式的尝试,这么一组短小精干的寓言故事,每一个都有一个鲜明、直接的主题,而古龙按照武...
    iClaud阅读 1,773评论 2 4