c#发展

注册

 

发新话题 回复该主题

金三银四面试CNET面试题高级篇1 [复制链接]

1#
北京中西皮肤病医院 http://m.39.net/pf/a_8810712.html

1、描述线程与进程的区别?

2、using关键字有什么用?跟IDisposable有啥关系?

3、前台线程和后台线程有什么区别?

4、什么是线程互斥?

5、如何查看和设置线程池的上下限?

6、Task状态机的实现和工作机制是什么?

7、await的作用和原理,并说明和GetResult()有什么区别?

8、多线程有什么用?

9、Task和Thread有区别吗?

10、为什么GUI不支持跨线程调用?有什么解决方法?

1、描述线程与进程的区别?

线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。

而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。

---详解

2、using关键字有什么用?跟IDisposable有啥关系?

有用,using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于try……finally,用起来更方便。

---详解

3.前台线程和后台线程有什么区别?

通过将Thread.IsBackground属性设置为true,就可以将线程指定为后台线程

托管线程可以是后台线程,也可以是前台线程。后台线程和前台线程几乎完全相同,只有一处不同,即后台线程不会确保托管执行环境一直运行。一旦托管进程(其中.exe文件为托管程序集)中的所有前台线程都停止,系统会停止并关闭所有后台线程。

前台线程:应用必须结束掉所有的前台线程才能结束程序,只要有一个前台线程没退出进程就不会自动退出,当然线程是依附在进程上的,所以你直接把进程KO掉了的话自然所有前台线程也会退出。

后台线程:进程可以不考虑后台直接自动退出,进程自动退出后所有的后台线程也会自动销毁。

4、什么是线程互斥?

当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作来保证访问的安全性。

---详解

5.如何查看和设置线程池的上下限?

线程池的线程数是有限制的,通常情况下,我们无需修改默认的配置。但在一些场合,我们可能需要了解线程池的上下限和剩余的线程数。线程池作为一个缓冲池,有着其上下限。在通常情况下,当线程池中的线程数小于线程池设置的下限时,线程池会设法创建新的线程,而当线程池中的线程数大于线程池设置的上限时,线程池将销毁多余的线程。

PS:在.NETFramework4.0中,每个CPU默认的工作者线程数量最大值为个,最小值为2个。而IO线程的默认最大值为个,最小值为2个。

在.NET中,通过ThreadPool类型提供的5个静态方法可以获取和设置线程池的上限和下限,同时它还额外地提供了一个方法来让程序员获知当前可用的线程数量,下面是这五个方法的签名:

①staticvoidGetMaxThreads(outintworkerThreads,outint

分享 转发
TOP
发新话题 回复该主题