.NET多线程知识你问我答

读后总结:
1. 为什么要有应用程序域(AppDemain)这个概念?
都知道每一个进程间都是相互隔离的,所有在进程间通讯是非常麻烦的事,.NET为了能够解决进程间的通信问题,推出了一个新的概念。于是.NET多个进程可以运行在同一个应用程序域中,这样不同应用程序域之间可以相互隔离,做到了安全性,同时降低了进程间通信的难度。
2. 为什么要用多线程?
如果只有一个CPU的情况下,我们知道多线程也是有一个CPU去执行的,并且一次只能执行单个线程,通过时间片的切换来根据线程的优先级轮流执行线程。但是时间片的切换也是需要消耗资源的,所以为什么用多个线程?其实在某些情况下,多个线程可以提供系统的性能。比如:在系统请求大容量的数据时使用多线程,把数据输出工作交给异步线程,使主线程保持其稳定性去处理其他问题。
3. 前台线程和后台线程对程序有什么影响?
Thread.Start()启动的线程默认为前台线程,而系统必须等待所有前台线程运行结束后,应用程序域才会自动卸载。线程Thread有一个属性IsBackground,通过把此属性设置为true,就可以把线程设置为后台线程!这时应用程序域将在主线程完成时就被卸载,而不会等待异步线程的运行。当时如果主线程等待其后台线程完成后再结束,这就会用到thread.Join()
4. CLR的线程池是怎样工作的? 
CLR线程池并不会在CLR初始化的时候立刻建立线程,而是在应用程序要创建线程来执行任务时,线程池才初始化一个线程。线程的初始化与其他的线程一样。在完成任务以后,该线程不会自行销毁,而是以挂起的状态返回到线程池。直到应用程序再次向线程池发出请求时,线程池里挂起的线程就会再度激活执行任务。这样既节省了建立线程所造成的性能损耗,也可以让多个任务反复重用同一线程,从而在应用程序生存期内节约大量开销。
5. 当利用线程池 ThreadPool.QueueUserWorkItem(WaitCallback,Object) 去调用多线程时,可以看到 QueueUserWorkItem只能传一个参数,并且没有返回值,那么怎样实现传多个参数和带返回值的异步调用呢?
可以利用Delegate实现带有多个参数和返回值的异步调用。
6. 当利用Delegate实现线程的异步时,怎样监控运行多个对象已经完成?
监控一个对象已经完成,可以用的IAsyncResult.WaitHandle.WaitOne 函数,但是监控多个运行对象时,WaitHandle准备了另外两个静态方法:WaitAny(waitHandle[], int)与WaitAll (waitHandle[] , int)。
7. 怎样利用Delegate完成异步调用?
一是用轮询的方式去判断异步是否完成,比如
             //建立委托
             MyDelegate myDelegate = new MyDelegate(Hello);
             //异步调用委托,获取计算结果
             IAsyncResult result=myDelegate.BeginInvoke("Leslie", null, null);
             //在异步线程未完成前执行其他工作
             while (!result.IsCompleted)
             {
                 Thread.Sleep(200);      //主线程操作
                 Console.WriteLine("Main thead do work!");
             }
             string data=myDelegate.EndInvoke(result);
二是用它的回调函数
 MyDelegate myDelegate = new MyDelegate(Hello);
 myDelegate.BeginInvoke("kntao", new AsyncCallback(Completed), null);
8.请举例CLR线程池的I/O线程操作?
I/O 线程是.NET专为访问外部资源所设置的一种线程,因为访问外部资源常常要受到外界因素的影响,为了防止让主线程受影响而长期处于阻塞状态,.NET为多个I/O操作都建立起了异步方法,例如:FileStream、TCP/IP、WebRequest、WebService等等,而且每个异步方法的使用方式都非常类似,都是以BeginXXX为开始,以EndXXX结束,
9.怎样避免多线程操作同一数据?
.NET提供了lock、Monitor、Interlocked等多个锁定数据的方式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值