操作系统 -- 多线程 Multi-Threading
什么是线程和多线程
进程的缺点
- 对于多个相关的进程,共享资源比较麻烦(参见进程间的通信), 并且切换进程需要同时切换资源和内存,代价很高. 比如一个浏览器的每一个功能都是一个独立进程的话, 那么这个浏览器的运行效率就会很低.
线程(Thread)
- 为了解决进程的缺点, 可以在同一个进程中创建多个轻量级的"进程",这些"轻量级"的进程可以共享资源
- 轻量级的"进程"就是线程(Thread)
- 同一进程中运行多个线程就是多线程
- 多线程可以保证线程并发实现多任务同时操作, 比如一个浏览器
线程的优点
- 在同一进程中可以同时执行多个任务,一个线程负责一个任务
- 多个线程可以直接共享资源, 避免了进程间复杂的资源共享机制(比如shared memeory,named pipe等)
- 在多核计算机中, 内核级多线程可以在不同的CPU上并行运行,但是单线程进程只能使用一个CPU
线程和进程的区别
- 线程是进程的最小组成单位, 任何一个进程都至少有一个线程
- 进程是在内核中的,因为需要给进程分配内存资源等核心资源,所以没有用户级进程,但是有用户级线程和内核级线程
- 用户及线程一般由编程语言控制,最后由可执行文件执行
- 切换进程需要同时资源, 代价很高 。而一个进程内的线程共用资源,避免了切换进程的代价同时保留了并发的优点
关于线程的资源
线程独有的资源
- 一般来说一个线程就是一个函数,所以线程运行的本质就是函数运行
- 所以一个线程有自己的
- stack (存放函数运行时需要的信息,如参数,返回地址等)
- register (存放局部变量)
- program counter
- 以上这些被叫做 thread context
线程共享的资源
- 线程共享了进程剩下的资源,包括
- 堆区: 动态分配的内存
- 代码区: 我们写的代码,更准确的是编译后的可执行机器指令
- 数据区:全局变量
- 打开的文件: 进程打开的文件也可以被所有的线程使用,这也属于
本文详细介绍了线程和多线程的概念,强调了线程在解决进程缺点中的作用,以及线程的优缺点。内容涵盖线程的资源、同步线程与异步线程的差异,并详细讨论了用户级线程和内核级线程,包括它们的创建、切换和区别,以及在多核处理器中的应用。


最低0.47元/天 解锁文章
389

被折叠的 条评论
为什么被折叠?



