线程:进程的一条执行流(可以有很多)
又称轻量级进程(LWP)(进程需要CPU执行全部 线程只需要执行一部分)
叫什么要看从什么角度出发(CPU看都是进程 本身看是线程 具体原因在下面的管理方式上)
和父进程共用一个虚拟地址空间(子进程有自己的虚拟地址空间)
线程在进程虚拟地址空间有独立空间 本质和进程用一个地址空间 没有自己的地址 只是有栈空间
TCB:线程控制块 (和PCB一样 所以Linux直接使用PCB管理进程和线程 不用TCB)
线程是调度的基本单位 进程是资源分配的基本单位
创建:
用原生线程库(pthread_creat)创建线程
一个线程可以创建或者销毁另一个线程
公有:
线程都共享一个虚拟地址空间 一个页表 进程中的绝大部分资源都是所有线程共享的
线程有各自的栈 共用一个堆
私有:
PCB属性 上下文数据 上面提到的栈
一些操作:
ps-L查看轻量级进程信息 pyhread_self获取线程tid getpid获取所有进程id
优点快:
和进程对比
进程:PCB切换 上下文切换 虚拟地址空间切换 页表切换
线程:PCB切换 上下文切换 (后两个共享)
其他
创建消耗资源少 占用资源少 能并行数量多 用户态线程在用户态切换 不需要内核支持 多线程可以充分利用cpu资源 提升程序响应等
进程比线程安全是不会公用一个堆 线程会同步消耗少 进程之间通信需要调用内核接口 线程没有资源 只是调度 进程资源由系统分配
缺点:
单线程崩溃会导致进程异常 导致程序退出
不能单独访问某个线程
处理器不同步造成的性能损失
退出:
主线程调用pthread_exit只会退出主线程 不会全部退出 谁调谁退出