NET面试题:多线程程序在操作系统里是并行执行的吗
2011-02-28 08:50
344 查看
NET面试题:多线程程序在操作系统里是并行执行的吗
编写多线程的程序,大部分情况下是希望得到并行处理带来的高效率。那在操作系统层面上多个线程的运行是否真的是并行运行的呢?这样的问题在.NET面试中也时常会出现,旨在考查应聘者关于操作系统中线程调度的基本知识。
所涉及的知识点
· 线程调度的概念
· 多处理器系统的特点
分析问题
1.线程调度
回顾计算机系统发展的历史,在早期的操作系统之上,应用程序的执行完全不存在并行的概念。所有的应用都排队等候在一个单线程的队列之中,每个程序都必须等到前面的程序都安全地执行完毕后才能获得执行的权利,一个小的错误将会导致操作系统上所有程序的阻塞。在后来的操作系统中,逐渐产生了分时和进程、线程的概念。
多个线程受到操作系统的调度控制,以决定何时运行哪个线程。所谓的线程调度,是指操作系统决定如何安排线程执行顺序的算法。按照常规的分类,线程调度可分为抢占式调度和非抢占式调度两种方法。
1)抢占式调度
抢占式调度是指每个线程都只有极少的运行时间(在Windows NT内核模式下这个时间不会超过20ms),而当时间用完时该线程就会被强制暂停,保存上下文并把运行权利交给下一个线程,这样调度的结果就是所有的线程都在被快速地切换运行,使得使用者感觉所有的线程在并行运行。
2)非抢占式调度
非抢占式调度是指某个线程在运行时不会被操作系统强制暂停,它可以持续地运行直至运行告一段落并主动地交出运行权。在这样的调度模式之下,线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。
现在很多的操作系统,包括微软公司的Windows系统,都同时采用抢占式和非抢占式模式。对于那些优先级相当高的线程,操作系统采用非抢占式来给予充分的时间运行,而对于普通的线程,则采用抢占式模式来快速地切换执行。
2.线程的并行问题
在单CPU单核的系统架构之上,线程的并行运行完全是使用者的主观体验,事实上在任一时刻只可能存在一个处于运行状态的线程。但在多CPU或多核的架构上,情况则略有不同。多CPU多核的架构允许操作系统完全并行地运行两个或多个无其他资源争用的线程,理论上这样的架构可以使运行性能整数倍地提高。
微软公司曾经提出过超线程的技术,简单来说这是一种逻辑上模拟多CPU的技术,但实际上它们却共享物理处理器和缓存。超线程对性能的提高相当有限。
答案
在单CPU的计算机架构上,任何时候只可能存在一个运行的线程,操作系统通过快速的调度轮换使使用者感觉到多线程在同时执行。而在多CPU的架构上,则可能存在完全并行运行的线程,这取决于线程之间是否争用了其他的资源
更多.net面试题,.net电子书,.net视频,请参考"51CTO提醒您,请勿滥发广告!"
编写多线程的程序,大部分情况下是希望得到并行处理带来的高效率。那在操作系统层面上多个线程的运行是否真的是并行运行的呢?这样的问题在.NET面试中也时常会出现,旨在考查应聘者关于操作系统中线程调度的基本知识。
所涉及的知识点
· 线程调度的概念
· 多处理器系统的特点
分析问题
1.线程调度
回顾计算机系统发展的历史,在早期的操作系统之上,应用程序的执行完全不存在并行的概念。所有的应用都排队等候在一个单线程的队列之中,每个程序都必须等到前面的程序都安全地执行完毕后才能获得执行的权利,一个小的错误将会导致操作系统上所有程序的阻塞。在后来的操作系统中,逐渐产生了分时和进程、线程的概念。
多个线程受到操作系统的调度控制,以决定何时运行哪个线程。所谓的线程调度,是指操作系统决定如何安排线程执行顺序的算法。按照常规的分类,线程调度可分为抢占式调度和非抢占式调度两种方法。
1)抢占式调度
抢占式调度是指每个线程都只有极少的运行时间(在Windows NT内核模式下这个时间不会超过20ms),而当时间用完时该线程就会被强制暂停,保存上下文并把运行权利交给下一个线程,这样调度的结果就是所有的线程都在被快速地切换运行,使得使用者感觉所有的线程在并行运行。
2)非抢占式调度
非抢占式调度是指某个线程在运行时不会被操作系统强制暂停,它可以持续地运行直至运行告一段落并主动地交出运行权。在这样的调度模式之下,线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。
现在很多的操作系统,包括微软公司的Windows系统,都同时采用抢占式和非抢占式模式。对于那些优先级相当高的线程,操作系统采用非抢占式来给予充分的时间运行,而对于普通的线程,则采用抢占式模式来快速地切换执行。
2.线程的并行问题
在单CPU单核的系统架构之上,线程的并行运行完全是使用者的主观体验,事实上在任一时刻只可能存在一个处于运行状态的线程。但在多CPU或多核的架构上,情况则略有不同。多CPU多核的架构允许操作系统完全并行地运行两个或多个无其他资源争用的线程,理论上这样的架构可以使运行性能整数倍地提高。
微软公司曾经提出过超线程的技术,简单来说这是一种逻辑上模拟多CPU的技术,但实际上它们却共享物理处理器和缓存。超线程对性能的提高相当有限。
答案
在单CPU的计算机架构上,任何时候只可能存在一个运行的线程,操作系统通过快速的调度轮换使使用者感觉到多线程在同时执行。而在多CPU的架构上,则可能存在完全并行运行的线程,这取决于线程之间是否争用了其他的资源
更多.net面试题,.net电子书,.net视频,请参考"51CTO提醒您,请勿滥发广告!"
相关文章推荐
- 让程序奔跑如风1-Net并行和多线程的纠结
- asp.net 定时执行程序
- .NET System.Timers.Timer的原理和使用(开发定时执行程序)
- SAP ABAP程序优化-多线程并行处理
- c# asp.net 测试程序执行时间
- Linux操作系统分析(2)- 进程的创建与可执行程序的加载
- 关于在IISserver上执行asp.net Web程序出现以下 “Could not load file or assembly。。。”问题的
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)-asp.net关注
- 多线程执行完后主程序再执行(包括需要子线程返回结果)
- Practical Multithreading for Client Apps (.net客户端程序使用多线程的实践)
- asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)
- asp.net 计划任务管理程序实现,多线程任务加载
- Linux操作系统分析之进程的创建与可执行程序的加载
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- asp.net利用多线程执行长时间的任务http://hi.baidu.com/lanxmail/blog/item/ccd6d5dcb8d65ea0cc1166a7.html
- .Net Framework CLR 托管程序执行机制
- 如何在ASP.NET程序里面执行DOS命令
- Linux操作系统下使用MONO执行C#程序的方法
- Java在windows上操作系统文件与程序,执行系统命令等的技巧 .
- Asp.net中执行.EXE程序的方法