第一部分 温故而知新之二 线程

1. 什么是线程?线程共享进程的哪些内存空间?线程独有的资源有哪些?

  • 线程(Thread): 是程序执行流的最小单元。
  • 线程共享进程的内存空间包括: 代码段、数据段、堆空间、以及一些进程级别资源(比如打开文件)
  • 线程独有的资源有: 线程 ID、当前指令指针(PC)、寄存器集合、栈空间
经典的线程与进程关系图

2. 多个线程与单个线程相比,有哪些优势?(换句话就是什么情况下使用多线程?至少说三点)

  • ① 某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行。多线程执行可以有效利用等待的时间。典型的例子是等待网络响应,这可能要花费数秒甚至数十秒。
  • ② 某个操作(常常是计算)会消耗大量时间,如果只有一个线程,程序和用户之间的交互就会中断。多线程可以让一个线程负责交互,另一个线程负责计算。
  • ③ 程序逻辑本身就要求并发操作。例如一个多端下载软件(比如迅雷)
  • ④ 多 CPU 或 多核计算机,本身具备同时执行多个线程的能力,因此单线程程序无法全面发挥计算机的全部计算能力。

3. 什么是线程调度?什么是时间片?

  • 线程调度(Thread Schedule):操作系统会让这些多线程程序轮流执行,每次仅执行一小段时间(通常是几十到几百毫秒),这样每个线程就“看起来”在同时执行。这样的一个不断在处理器上切换不同线程的行为称之为线程调度
  • 时间片(Time Slice): 处于运行中的线程拥有一段可以执行的时间,这段时间称为时间片(Time Slice)

4. 在线程调度中,线程通常拥有至少三种状态,分别是什么?状态之间如何切换?

  • 运行(Running): 此时线程正在执行。
  • 就绪(Ready): 此时线程可以立刻运行,但是 CPU 已经被占用。
  • 等待(Waiting): 此时线程正在等待某一事件(通常是 I/O 或同步)发生,无法执行。
线程状态切换

5. 线程调度自多任务操作系统问世以来就不断被提出不同的方案和算法,现在主流的调度方式尽管各不相同,但是都有哪两种方案的影子?

  • 优先级调度(Priority Schedule)
  • 轮转法(Round Robin)

6. 为了避免多个线程同时读写同一个数据而产生不可预料的后果,我们要将各个线程对同一个数据的访问同步,请解释这里的同步的含义?

  • 同步(Synchronize):即在一个线程访问数据未结束的时候,其他线程不得对同一个数据进行访问。如此,对数据的访问被原子化了。

7. 同步的最常见方法是什么?比阐述其机制?

  • 同步的最常见方法是使用锁(Lock)
  • 是一种非强制机制,每一个线程在访问数据或资源之前首先试图获取(Acquire)锁,并在访问结束之后释放(Release)锁。在锁已经被占用的是会试图获取锁时,线程会等待,直到锁重新可用。

8. 在加锁方案中,信号量有什么特点?

  • 信号量(Semaphore): 是最简单的一种锁。
  • 特点:它只有占有与非占有两种状态,释放者和加锁者可以不是同一线程。
  • 也就是说,同一个信号量可以被系统的中一个线程获取后由另一个线程释放。

9. 在加锁方案中,互斥量有什么特点?

  • 互斥量(Mutex)和二元信号量很类似,资源仅同时运行一个线程访问。
  • 和信号量不同的是,互斥量要求哪个线程获取了互斥量,哪个线程就要负责释放这个锁,其他线程越俎代庖去释放互斥量是无效的。

10. 在加锁方案中,读写锁有什么特点?

  • 读写锁(Read-Write Lock):致力于一种更加特点的场合的同步。
  • 读写锁有两种获取方式,共享的(Shared)独占的(Esclusive)
  • 当锁处于自由的状态时,试图以任何一种方式获取锁都能成功,并将锁置于对应的状态。
  • 当锁处于共享状态时,其他的线程以共享的方式获取锁仍然成功,此时这个锁分配给了多个线程。然而,如果其他线程试图以独占的方式获取已经处于共享状态的锁,那么它必须等待锁被所有的线程释放。
  • 当锁处于独占状态时,锁将阻止其他任何线程获取该锁,不论它们试图以哪种方式获取。

11. 在加锁方案中,条件变量有什么特点?

  • 条件变量(Condition Variable)作为一种同步手段,作用类似于一个栅栏。
  • 线程可以有两种操作:①线程可以等待条件变量 ②线程可以唤醒条件变量
  • 一个条件变量可以被多个线程等待。
  • 线程唤醒条件变量,此时所有等待次条件变量的线程都会被唤醒并继续执行。

12. 对用户来说如果有三个线程在同时执行,对内核来说可能只有一个线程,你怎么理解这句话?

  • 用户实际使用的线程并不是内核线程,而是存在于用户态的用户线程

13. 对于用户线程和内核线程的线程模型有哪三种?

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

推荐阅读更多精彩内容