多线程与并行

1.进程和线程的区别?为什么要用多线程?多线程适合在哪些场合?

   进程是正在运行的程序,线程是某个进程中的一个或多个执行执行流。多线程可让多个任务同时执行。当执行需要长时间才能完成的连续操作时,或者等待网络或其他I/O设备相应时,都可以使用多线程技术。

2.一个线程要么是前台线程妖魔是后台线程?

两者的区别是:后台线程不影响进程终止,而前台线程则会影响进程终止。

3.什么是同步?为什么需要同步?C#提供了什么语句可以简单的实现同步?

执行某语句时,在该语句执行之前不会执行其后的代码,这种方式称之为同步。当并行执行的多个线程同时访问某些资源时,必须考虑如何让多个线程保持同步。同步的目的是为了防止多个线程同时访问某些资源出现死锁和征用情况。C#提供的Lock语句可以简单的实现代码同步。

4.什么是线程池?使用线程池有什么好处?

线程池是在后台执行任务的线程集合,好处有:(1)如当某个线程无法进入线程池执行时将其放入线程队列,自动决定用哪个处理器执行线程池中的某个线程,自动调节这些线程执行时负载均衡问题等。另外,线程池总是在后台异步处理请求的任务,而不会占用主线程,也不会延迟主线程中后续请求的处理。

5.应用程序域和进程有什么区别和联系?

一个进程既可以只包含一个应用程序域,也可以同时包含多个相互隔离的应用程序域。多进程是在操作系统级别使用的功能,资源消耗较大,细节控制复杂;应用程序域是在应用程序级别使用的功能,比直接用多进程来实现进程管理速度快、资源消耗少而且安全,是轻量级的进程管理。

6.仅包含async和await 关键字的异步方法与用Task.Run调用的异步方法有何不同?

async和await关键字是C#5.0提供的功能,仅包含async和await关键字的异步方法不会创建新线程,它只是表示在当前线程中异步执行指定的任务。而Task.Run方法是.Net框架4.5提供的功能,它会在线程池中用单独的线程执行某个任务。

7.普通方法和异步方法作为任务来执行,调用方法有何不同?

普通方法要用Task.Run方法调用,或者用Task、Task<TResult>类的构造函数显式创建Task实例,然后再启动。异步方法不需要用Task.Run方法调用。

8.Action和Func<>委托有什么不同?

Action委托封装了不带返回值的方法(有0-16个参数,返回类型为void),Func委托封装了带返回值的方法(016个参数,返回值类型TResult)

9.有几种创建任务的方式?

有4种:

(1)利用Task.Run方法隐式创建和执行任务

(2)利用async和await关键字隐式创建异步任务

(3)利用WPF控件的调度器XXX.DispatcherInvoke() 或者用WinForm控件的XXX.BeginInvoke和XXX.EndInvoke()创建和执行任务

(4)通过显式调用Task或Task<TResult>的构造函数来创建。

10.在WPF应用程序中有几种可用的定时器?

有3中

(1)System.Timers.Timer类

(2)System.Windows.Threading.DispatcherTimer

(3)System.Threading.Timer类

11.简述任务的取消功能机制

System.Threading.Cancellation.TokenSource用于创建取消通知,成为取消源

System.Threading.Cancelation.Token结构用于传播取消操作的通知,成为取消令牌。

调用任务的代码在分配任务前,可先用Cancellation.TokenSource类创建一个取消源,在调用任务的代码中,可通过取消源的Cancel方法发出取消通知,该方法会将每个取消令牌副本上的IsCancellationRequested属性都设置为True

执行任务的方法接收到取消通知后,可终止执行。

12.TPL支持哪些并行方式?

TPL支持数据并行,任务并行和并行查询(PLINQ) 如:Parallell.Foreach(m=>m.xxx) 来代替Foreach  

13.并行编程中的分区有哪些?

按范围分区、按区块分区、动态分区、自定义分区

14.简述Parallel帮助器类有哪些?功能分别是什么?

帮助其类包括ParallelOptions、ParallelLoopState、ParallelLoopResult、CancellationToken和CancllationTokenSource

ParallelationOptions类用于将Parallel类的方法提供操作选项,常用属性有CancellationToken、MaxDegreeOfParallelism、TaskScheduler

ParallelLoopState类用于将Parallel循环的迭代与其他迭代交互常用属性和方法有IsExceptional属性、IsStopped属性、Break方法、Stop方法

ParrallelLoopResult类用于提供Parallel循环的完成状态,常用属性有:IsCompleted、LowestBreakIteration

CancellationTokenSource用于创建取消通知、称为取消源

CancellationToken结构用于传播应取消操作的通知、称为取消令牌

15、常用的兵法集合类有几种?

ConcurrentBag<T> 、ConcurrentQueue<T>、ConcurrentStack<T>、ConcurrentDictionary<TKey,TValue>

16.使用Parallel.Invoke方法时,为了能让Action与WPF界面交互,要注意什么问题?

不能使用默认的任务调度程序,而使通过设置并行选项,将任务调度程序与WPF当前上下文关联起来,相关代码如下:

ParallelOptions options=new ParallelOptions();

options.TaskScheduler=TaskScheduler.FromCurrentSynchornizationContext()

原文地址:https://www.cnblogs.com/sundh1981/p/13717239.html