线程

线程

线程相关概念:
  查看指定线程的LWP号
    线程号和线程ID有区别; 用户查看线程ID, 内核查看线程号
    找到程序的进程ID, 然后执行ps -Lf pid
  创建线程之后, 地址空间没有变化; 进程退出成线程--主线程; 创建出的子线程和主线程共用地址空间; 主线程和子线程有各自独立的pcb, 子线程的pcb是从主线程拷贝而来
  子线程不能使用exit退出
  在linux下: 线程就是进程--轻量级进程, 对于内核来说, 线程就是进程

.txt, .bss, 堆, 栈, 动态库加载区, 环境变量, 命令行参数
主线程和子线程共享: .txt, .bss, .data, 堆, 动态库加载区, 环境变量, 命令行参数
非共享: 栈, 一共有5个线程, 栈区被平均分成5份
通信: 全局变量, 堆

线程共享资源: (1) 文件描述符表; (2) 每种信号的处理方式; (3) 当前工作目录; (4) 用户ID和组ID; (5)内存地址空间(.text/.data/.bss/heap/共享库)

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

线程优缺点:
  优点: (1) 提供程序并发性; (2) 开销小; (3) 数据通信和共享数据方便
  缺点: (1) 库函数不稳定; (2) 调试和编写困难, gdb不支持; (3) 对信号支持不好
  有点相对突出, 缺点不是硬伤. linux下由于实现方法导致进程和线程差别不是很大

多线程和多进程区别:
  进程始终共享: 代码, 文件描述符, 内存映射区
  线程始终共享: 堆, 全局变量-->节省资源

posted @ 2019-04-19 21:34  张飘扬  阅读(162)  评论(0编辑  收藏  举报