建站提交历史文章,原文写作时间 2023 年 2 月前后。

线程概述

  • 线程Thread)本质上是轻量级进程(LWPLight Weight Process),但与进程拥有不同的行为。在Linux线程被当作进程进行处理,在原生Linux中并不支持线程。现在Linux操作系统上的线程,大多是Red Hat基于POSIX开发的NPTLNative POSIX Tread Library)。

  • 线程是轻量级进程。在进程创建时虽然运用写时拷贝技术大幅度减少了拷贝量,但仍然需要拷贝PCB中诸如虚拟内存映射表以及文件描述符表中的数据;线程共享PCB,这意味着线程创建时拷贝的数据量很小,创建线程的开销通常是进程创建的1/10或者更少。

  • 线程依然具有不共享资源:

    • 线程号线程的实时调度策略与优先级
    • 信号掩码
    • 线程特有数据
    • errorno变量(线程操作中,errorno通过函数返回,而非设置全局变量
    • 栈空间.text空间线程运行在函数体中,因此外部无法访问函数体数据与代码)
  • 与进程不同地,进程拥有父子关系构成的复杂进程树结构,而线程仅拥有主线程子线程的二级父子关系。