内核态

聊聊线程技术与线程实现模型

我的未来我决定 提交于 2019-12-01 22:41:34
摘要 做多线程应用开发,对于线程的理解是非常重要的,我们要为我们创建的每一个线程负责。这篇文章主要聊聊操作系统线程相关的主题,在了解线程定义、用户态与内核态、模态切换、线程上下文切换的基础之上再对常见的三种线程模型进行进一步介绍,希望对大家能够有所帮助。 线程概论 线程定义 什么是线程?《POSIX Threads Programming》中有一段话对线程的定义进行描述: A thread is defined as an independent stream of instructions that can be scheduled to run as such by the operating system. 线程可以被认为是一个可以被独立调度的实体,这个实体共享进程的地址空间、文件描述符、代码和数据,且拥有自己私有的栈、寄存器上下文、和程序计数器。 为什么要线程 我们在github上面给开源项目提交代码的时候,按照comment格式都要写Motivation这部分,我们今天讨论线程这个存在,也要讨论线程为什么存在。 在很多应用中需要同时执行多个任务,这些任务大部分甚至全部都可以相互独立的并行的执行。比如一个网络代理,传统的实现是用一个进程作为监听器来监听网络端口,当有客户端连接进来的时候,当前进程将会fork一个新的进程来处理客户端的请求。这种体系结构不好的地方如下: