什么是线程 什么是进程
线程是计算机中运算调度的最小单位,
他在进程的地址空间内运行。 是进程实际运作单位
一条线程是进程中单一顺序的执行流
。线程使操作系统调度执行的基本单位。
而进程是操作系统中资源分配的基本单位,进程有自己独立的地址空间(页表),文件描述符管理的文件,IO设备,操作系统通过这些一定程度防止进程间资源的冲突。
???为什么vfork 保证子进程先执行 因为公用同一地址空间 父子进程同时在一个调用栈里跑 调用栈会混乱
内核角度看线程
在操作系统内核眼中 不区分进程和线程 他的眼中只有task_struct 要执行一个线程 (轻量级进程)/进程(单进程进程 或 主线程) 将其task_struct放入执行队列中
把一个线程挂起 就是把他放在挂起队列中
每一个进程有多个线程 也就是有多个PCB (task_struct) 内核通过task_struct来控制调度线程/进程
getpid() 返回的是task_struct结构体中的 pid_t tgid; 一个进程中的多个线程叫一个线程组 组id tgid
gettid() 返回值是task_struct结构体中的 pid_t pid
一个进程执行后 默认打开了第一个线程叫主线程 主线程pid tgid 一样 单线程进程中 只有主线程
线程组中除了主线程之外 其他线程是对等的 没有类似进程的父子关系.
线程组id等于进程中第一个线程id(主线程id)。tgid。
创建一个线程内核中多了一个县城的PCB,但是这个PCB和其进程