多線程與並行


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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM