动机
- 一个应用通常需要处理很多工作,这些同时执行徳任务可以称为“执行流”,我们不希望他们是顺序执行的。
- 进程的创建需要消耗大量的时间和资源
- 现在,和一个应用相关的所有执行的任务都装在一个进程里面,这些进程内部的执行任务就是“线程”
thread
- multithreaded process(多线程)
- shared(共享)
- 访问代价低
- 存储资源节省
- 如果是多进程,那么会使用多个内存空间,并且对于需要共享的资源,还需要进程机制去共享资源,又会耗费时间。
- 共享code,data,files
- 采用多线程的优点
- 响应性:可以加快响应
- 资源共享:code data files
- 经济:创建和切换比多进程好
- 可伸缩性:多核下可以并行
- definition of threa
- A thread is a basic unit(基本单元) of CPU utilzation(利用); it comprises a thread id(tid),a program counter, a register set,and a stack(存储局部变量).
- It shares(共享) with other threads belonging to the same process its code section,data section ,and other operating-system resources,such as open files and signals.
- A traditional (or heavyweight) process has a single thread of control .If a process has multiple threads of control ,it can perform more than one task at a time.
多线程模型
- 多核编程
- 在多处理器系统中,多核编程机制让应用程序可以更加有效地将自身的多个执行任务(并发的线程)分散到不同的处理器上去运行,以实现并行计算。
- 所以我们一般考虑多核编程
- 多线程模型
- 用户线程ULT(user level thread)
- ULT在user mode 下运行,它的管理无需内核支持
- 内核线程KLT(Kernel Level Thread)
- M:1模型
- 多个用户线程对一个内核线程
- 优点与缺点:
- 优点:多个执行流
- 缺点:实际上只有一个内核线程,多个用户线程,在一个时刻只有一个用户线程在运行。
- 1:1模型
- 一个用户线程对应一个核心线程,对应一个cpu
- 优点:并发+并行
- 缺点:内核开销大(时间,空间)
- M:M
- 多路复用,多个用户线程对应多个核心线程
- 优点:节省内核开销
- 缺点:实现起来复杂(需要一个管理机制,管理多少个user mode 和kernel mode)
线程库
- thread library为程序员提供创建和管理线程的API
- posix pthreads:用户线程库和内核线程库
- windows thread:内核线程库
- java thread:依赖所依赖的操作系统而定