首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android C++系列:Linux线程(一)概念

1. 什么是线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在 Unix System V 及 SunOS 中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

2. 线程和进程的关系

  1. 轻量级进程(light-weight process),也有 PCB,创建线程使用的底层函数和进程一 样,都是 clone;
  2. 从内核里看进程和线程是一样的,都有各自不同的 PCB,但是 PCB 中指向内存资源的三级页表是相同的;
  3. 进程可以蜕变成线程;
  4. 在美国人眼里,线程就是寄存器和栈;
  5. 在 linux 下,线程最是小的执行单位;进程是最小的分配资源单位查看 LWP 号。
代码语言:javascript
复制
ps -Lf pid ps -eLf

复制代码

3. 线程间共享资源

  1. 文件描述符表;
  2. 每种信号的处理方式;
  3. 当前工作目录;
  4. 用户 ID 和组 ID;
  5. 内存地址空间
代码语言:javascript
复制
Text databss堆共享库

复制代码

4. 线程间非贡献资源

  1. 线程 id;
  2. 处理器现场和栈指针(内核栈);
  3. 独立的栈空间(用户空间栈);
  4. errno 变量;
  5. 信号屏蔽字;
  6. 调度优先级

5. 线程优缺点

优点:

  1. 提高程序的并发性;
  2. 开销小,不用重新分配内存;
  3. 通信和共享数据方便

缺点:

  1. 线程不稳定(库函数实现);
  2. 线程调试比较困难(gdb 支持不好);
  3. 线程无法使用 unix 经典事件,例如信号

6. pthread manpage

查看 manpage 关于 pthread 的函数

代码语言:javascript
复制
man -k pthread

复制代码

Ubuntu 可以通过以下命令安装 man 命令:sudo apt-get install manpages-posix manpages-posix-dev

7. 总结

本文介绍了线程概念,线程和进程间关系,线程间共享资源和非共享资源,线程优缺点以及 man 工具的安装和使用。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/740a102b5f52257256edad35b
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券