网站建设有哪些分工分,天津网站建设开发有哪些,python 网站开发代码,珠海网站建设培训目录一、理解线程的思想二、Linux中的线程与进程1.Linux中的进程2.Linux中的线程三、线程的工作方式四、线程的独有数据与共享数据1.独有数据2.共享数据一、理解线程的思想 线程就是把一个进程分成多个执行部分#xff0c;一个部分就是一个线程#xff0c;比如可以让一个线程…
目录一、理解线程的思想二、Linux中的线程与进程1.Linux中的进程2.Linux中的线程三、线程的工作方式四、线程的独有数据与共享数据1.独有数据2.共享数据一、理解线程的思想 线程就是把一个进程分成多个执行部分一个部分就是一个线程比如可以让一个线程负责一个函数的执行。 用工厂的生产流水线来说一条生产线一天制造10个产品。A厂有10条生产线B厂有1条A厂的生产效率自然是要比B厂好的。而进程就像是工厂线程就像是流水线流水线数量多自然工厂的生产效率也更高。 但流水线的数量也不是越多越好的流水线也是有成本的流水线越多成本也越高。因此我们要对效率和成本进行综合考虑找到一个最适合的流水线数量。 线程数量也是同理线程数量越多系统负荷就越大因此要找到线程的合适数量这样才能获得最大的效率。
二、Linux中的线程与进程
1.Linux中的进程 在最开始学习的时候进程就是pcb。在Linux中进程pcb是一个task_struct结构体是操作系统对于程序运行的动态描述系统通过进程pcb进行程序调度和管理。
2.Linux中的线程 将整个进程的任务分成若干条执行流每条执行流就是一个线程。但是Linux中其实并没有线程这个概念因此并没有描述线程信息的结构体。 虽然Linux中没有线程这个概念但是总不能不用线程。因此线程的pcb结构体也是task_struct结构体和进程是一样的所以Linux中的线程又被称为轻量级进程。 而我们之前学习的进程其实就是只有一个线程的进程。在开始接触线程后进程中就包含了多个线程轻量级进程因此一个进程也就包含了多个pcb这些pcb共享进程中的大部分资源。
三、线程的工作方式
多个线程是如何共同执行一个进程的 1每个进程都有独立的虚拟空间但线程不是。同一个进程下的多个线程pcb通过同一个虚拟地址空间映射执行一个进程中的不同部分。 2同一个进程下的线程使用同一个虚拟空间和页表。因为每个线程都负责了程序的一部分如果单独给每个线程分配虚拟空间和页表那线程和进程就没区别了。 四、线程的独有数据与共享数据 虽然一个进程下的多个进程共享同一个虚拟空间和页表并且线程之间共享大部分数据。但每个线程也是有自己的隐私的因此线程的数据分为共享数据和独有数据。
1.独有数据 线程的独有数据标识符上下文数据程序计数器栈信号屏蔽字errno
标识符用来区分线程的标志也就是线程pcb的pid。上下文数据每个线程都要记录自己处理完的数据正在处理的数据将要处理的数据。栈因为多个线程共用同一个虚拟空间和页表避免造成调用栈混乱线程要有独立的栈。信号屏蔽字即信号阻塞集合。每个线程都有两个信号阻塞集合一个是进程的阻塞集合代表该进程下的所有线程都要阻塞的信号。一个是每个线程独有的信号阻塞集合代表各个线程自身要阻塞的信号。errno全局变量存储错误编号每个线程pcb中都有。
为什么信号阻塞集合要独有 因为CPU的分时机制程序是切换运行的。进程收到的信号所有线程都可以处理但某些线程可能工作比较繁忙如果让它们处理信号可能会降低它们的工作效率。因此就给每个线程设置了独立的信号阻塞集合让每个线程只处理规定让它们处理的信号就好。
2.共享数据 线程的共享数据虚拟地址空间IO信息信号处理方式工作路径。
虚拟地址空间同一个进程下的多个线程之间通过共享同一个虚拟地址空间和页表来执行进程中的不同部分。IO信息同一个进程中的所有线程都共享了IO信息A线程打开的文件B线程也可以访问。工作路径默认情况下程序运行的地方就是工作路径通常需要设置。