異步編程

採用多線程解決多核處理、資源共享和耗時任務,同時也會出現內存損耗問題,因此多線程的選擇處理需要慎重。線程根據操作的不同場景分爲不同的狀態,分爲未啓動、啓動、休眠和掛起等狀態。線程分爲前臺線程和後臺線程,兩者的區別是後臺線程中不包含可執行環境,前臺線程結束,後臺線程隨之結束。
託管線程和非託管線程最大的區別在於是否在公共運行庫中有上下文,是否能夠進行監控和內存回收。非託管的線程需要手動進行內存回收,託管線程則不需要。
線程的數據存儲通過線程本地存儲(TLS),本地存儲的方式包括線程靜態字段和數據槽。兩者對於線程而言都是單獨的備份,也就是說每個線程都存在自己的備份,相互之間不可以修改,處分進行共享對象的共享。
異步任務模型,
同步模型的編程模型包括輸出、函數名稱、取消、異常和進度等模塊,每個模塊都有其特殊性。同步編程模型分爲計算型同步和讀寫型同步。前者可以通過Task的任務模型進行啓動,同時可以傳入CancellationToken監控任務進程。通過任務的進程代理分爲兩種Action<T>和Func<TResult>,前者返回Task對象,後者返回Task<Tresult>.對於沒有返回值的對象很好理解,對於有返回值的對象,需要初始化TaskCompletionObject<TResult>對象,具體實例如下:
{
    var tcs = new TaskCompletionSource<int>();
    stream.BeginRead(buffer, offset, count, ar =>
    {
        try { tcs.SetResult(stream.EndRead(ar)); }
        catch (Exception exc) { tcs.SetException(exc); }
    }, state);
    return tcs.Task;
}
{
    if (input == null) throw new ArgumentNullException("input");
    return MethodAsyncInternal(input);
}
private async Task<int> MethodAsyncInternal(string input)
{
   // code that uses await goes here
   return value;
}
public static Task<int> ReadTask(this Stream stream, byte[] buffer, int offset, int count, object state)
手動實現的第二條途徑,將關鍵的邏輯代碼進行提煉,形成混合模式,混合其實例代碼如下:
public Task<int> MethodAsync(string input)
通過微軟MVC和JAVA編程語言的學習,得出如下的結論:1)任何事物沒有絕對的現金與成功,
隨着時間和技術的進展,一切都可能變爲過去式.java引以爲傲的Spring+Structs,Net隨之有了MVC和EntityFramework,
2)java的缺陷在於沒有統一的規劃,如果採用此種路線需要技術人員具備很好的攻堅能力 3)對於技術型公司,這就是一個很好的吸引力.

發佈了43 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章