网站建设 $ 金手指排名效果好,做网站公司郑州汉狮,百度搜索收录提交入口,wordpress 缓存用什么1. 线程概念 线程#xff1a;轻量级进程#xff0c;在进程内部执行#xff0c;是OS调度的基本单位#xff1b;进程内部线程共用同一个地址空间#xff0c;同一个页表#xff0c;以及内存中的代码和数据#xff0c;这些资源对于线程来说都是共享的资源 进程#xff1a;…1. 线程概念 线程轻量级进程在进程内部执行是OS调度的基本单位进程内部线程共用同一个地址空间同一个页表以及内存中的代码和数据这些资源对于线程来说都是共享的资源 进程在用户视角下内核数据结构该进程对应的代码和数据在内核的视角下承担分配系统资源的基本实体 其实在之前没有了解线程之前的进程就是一个只有一个主线程的进程 现在又该如何理解线程和进程之间的关系呢 线程和进程之间就像家庭成员和家庭之间的概念家庭是由所有家庭成员共同组成的在这个社会中可能有三口之家五口之家 我们在社会中被描述为一个整体比如户口本就是按家庭发放的房屋是按家庭建造的社会资源按家庭分配的例如疫情期间买菜 家庭成员和家庭之间的关系就是一荣俱荣一损俱损的关系线程异常时会触发信号机制终止进程内核所有线程都会退出 我们在家庭中扮演不同的角色也在使用不同的资源家庭负责分配这些资源其中有大部分资源是家庭成员之间共享的比如卫生间客厅但总有一个房间是给你住的作为你的私人空间 家庭资源空间数据 私人空间后面会说 在Linux中没有专门为线程管理创建新的数据结构而是沿用了进程的task_struct用它来模拟线程线程和进程有很多共性为此Linux下的所有版本都安装了pthread系统库为了提供用户使用的接口 库底层调用了clone系统接口所以系统提供一部分库提供一部分就组成了Linux下的线程 所以使用线程库的时候需要包含头文件pthread.h编译时需要-lpthread 线程共享进程数据但也拥有自己的一部分数据
线程独有
线程ID一组寄存器上下文独立栈结构errno变量在线程内部信号屏蔽字block调度优先级
线程共有
文件描述符表信号处理方式当前工作目录用户id和组id权限 线程独立的栈结构保存临时数据和上下文数据体现了线程的动态属性
线程如何实现独立的栈结构 线程库提供了线程创建接口它会在地址空间的共享区中创建对应线程的栈结构其实在上面系统接口中就有所体现clone中有一个参数child_stack的指针栈地址栈的组成应该是系统提供的 通过clone系统接口的第一个参数函数指针其实如何让线程执行自己代码其实就是执行函数代码
2. 线程vs进程 进程是资源分配的基本单位 线程是CPU调度的基本单位 线程切换的成本更低 因为线程间共享地址空间和页表这些不需要切换 其次CPU内部有L1~L3 的 cache 高速缓存对内存的代码和数据根据局部性原理预读到CPU内部进而提高效率也不用切换 3. 线程的优缺点
优点
创建切换占用资源都比进程小能充分利用多处理器可并行的数量在等待慢速IO操作结束的同时程序可以执行其他任务计算密集型应用为了能在多处理器系统上运行将计算分解到多个线程中IO密集型应用为了提高性能将IO操作重叠可以同时等待不同的IO
缺点 缺乏访问控制后续会学互斥同步信号量来解决这一问题
完。