线程
引入线程的原因:
总地来说:方便用户
{
- 进程的属性是独立运行和独立拥有资源,系统在调度一个进程的同时还涉及资源的分配与状态转换。
- 如果在调度一个程序时不涉及资源的管理,调度过程会大大加快。
- 线程是进程的一个实体,是被系统独立调度的基本单位。
- 一个进程可建立多个线程,这些线程共享进程拥有的全部资源
- 多个线程之间并发执行,切换时快速简便——不消耗cpu的资源
}
特征:
【动态性、并发性、(运行)独立性、异步性】
线程与进程的比较:
{
进程:
是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈及其他辅助记录运行轨迹的数据
线程:
是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位
所有的线程运行在同一个进程中,共享相同的运行资源和环境
线程一般是并发执行的,使得实现了多任务的并行和数据共享。
进程和线程的区别:
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
资源分配给进程,同一进程的所有线程共享该进程的所有资源。
CPU分给进程程,即真正在CPU上运行的是线程
线程不能够独立执行,必须依存在进程中
优缺点:
线程执行开销小,但不利于资源的管理和保护;而进程正相反
}
课内要求:线程和进程的比较
{
(1)调度:同一进程的多线程间调度时,不引起进程的切换;不同进程的线程间调度时,需要进程切换。
(2)并发性:一个进程的多个线程之间可以并发执行。
(3)资源的拥有:线程不拥有系统资源,不拥有代码段,数据段。
(4)系统开销:
【线程:系统仅为其保存少量寄存器内容;进程:整个当前cpu环境。】
}
os对线程的实现方式:
1)内核级线程
依赖于os核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数
#内核维护进程和线程的上下文信息
#线程切换由内核完成
#一个线程发起系统调用而阻塞,不会影响其他线程的运行
#时间片分配给线程,所以多线程的进程获得更多cpu时间。
2)用户级线程
不依赖于os核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
调度由应用软件内部进行,无需用户态/核心态切换,所以速度特别快。os核心并不知道用户级线程的存在,只知道用户进程的存在。
一个线程发起系统调用而阻塞时,则整个进程在等待。时间片分配给进程,多线程时则每个线程就慢。
内核级线程与用户级线程的比较
- 线程的调度与切换速度(用户级线程无需用户态/核心态切换)
- 系统调用(用户级线程阻塞整个进程)
- 线程执行时间:例:一个用户级进程拥有一百个线程,cpu分配给进程1秒,则每个进程只能进行0.01秒;而一个核心级进程拥有一百个线程,cpu独立分配给线程时间片,所有时间不限制到结束任务。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103317.html