程序员的自我修养---4.线程基础

1.线程

线程 ( Thread ) , 有时被称为轻量级进程 ( Lightweight Process , LWP ) , 是程序执行流的最小单元。—个标准的线程由线程丨D 、 当前指令指针 ( PC ) 、 寄存器集合和堆栈组成 。 通常意义上 , 一个进程由一个到多个线程组成 , 各个线程之间共亨程序的内存空间 ( 包括代码段 、 数据段 、 堆等 〉 及一些进程级的资源 ( 如打开文件和信号 )。— 个经典的线程与进程的关系如图 I - 8 所示 。

 人多数软件应用中 . 线程的数量都不止一个 。 多个线程可以包不干扰地并发执行 , 并共享进程的仝局变录和堆的数据 。 那么 , 多个线程与单线程的进程相比 , 又有哪些优势呢 ? 通常来说 ,

2. 使用多线程的原因有如下几点 。

 1)某个操作可能会陷入长时间等待 , 等待的线程会进入睡眠状态 , 无法继续执行 。 多线程执行可以有效利用等待的时间 。 典型的例子是等待网络响应 , 这可能要花费数秒甚至数十秒 。
2) 某个操作 ( 常常是计算 ) 会消耗大最的时间 , 如果只有一个线程 , 程序和用户之间的交互会中断 。 多线程吋以让一个线程负责交互 , 另一个线程负资计算 。
3) 程序逻辑本身就要求并发操作 , 例如一个多端下载软件 ( 例如Bittonent ) 。
4) 多 CPU 或多核计算机 ( 堪本就是未来的主流计算机 ) , 本身具备同时执行多个线程的能力 , 因此单线程程序无法全向地发挥计算机的全部计算能力 。
5)相对多进程应用 , 多线程在数据共享方面效率要高很多 。

3.线程的访问权限
线程的访问非常自由 , 它可以访问进程内存里的所有数据 , 甚至包括其他线程的堆栈 ( 如果它知道其他线程的堆栈地址 , 那么这就是很少见的情况 ) , 但实际运用中线程也拥有自己的私有存储空间 , 包括以下几方面 。
• 栈 ( 尽管并非完全无法被其他线程访问 , 但一般情况下仍然可以认为是私有的数据 ) 。
• 线程局部存储 ( Thread Local Storage , TLS ) 。 线程局部存储是某些操作系统为线程单独提供的私有空间 . 但通常只具有很有限的容量 。
• 寄存器 ( 包括 PC 寄存器 ) , 寄存器是执行流的基本数据 , 因此为线程私有 。
从 C 程序员的角度来看 , 数据在线程之间是否私有如表 1 - 1 所示 。

发布了81 篇原创文章 · 获赞 17 · 访问量 6009

猜你喜欢

转载自blog.csdn.net/hopegrace/article/details/103882707
今日推荐