c# 多執行緒使用總結
執行緒:thread類是c#語言對執行緒物件的乙個封裝;
4核8程序:模擬核,乙個cpu每秒10億次計算,可以分成多個片,每個片可被乙個執行緒使用
cpu分片:作業系統把:cpu分片,乙個物理cpu同時只能為乙個任務服務;
同步方法:發起呼叫,執行完後依次執行下乙個任務
非同步方法:任何乙個非同步多執行緒離不開委託,發起呼叫,啟動乙個新的執行緒來完成任務;
actionaction= this.dosomething;
action.begininvoke("btn");
1.同步方法卡介面,主線程忙與計算,無暇他姑;非同步方法不卡,主線程閒置,計算任務交給子任務;
可以改善使用者體驗,web應用發簡訊通知,啟動非同步多執行緒去完成;
卡介面,慢,啟動有序/不卡,快,啟動無序;
資源換效能 :
1.資源不是無限的;
2.資源排程損耗;
3.所有執行緒並不是越多越好;
程式向執行緒池發執行緒請求,執行緒池向作業系統請求資源,安排不同的cup片排程處理
多執行緒由時間先後順序要求的,要特別小心,不能通過延時,預估來估計;
並行:多核之間叫並行
併發:cpu分片的併發;同一時間做多個事
cpu * 4
async
2.判斷多執行緒執行完成的方法;
1.**callback;
2.asyncresult.iscomleted
3.waitone:asyncresult.asyncwaithandle.waitone()
4.endinvoke(asyncresult)
private void testthread( )
");console.writeline($"btnasyncadvanced_click計算成功了。。");
};asyncresult = action.begininvoke("btnasyncadvanced_click", callback, "aa");
//2 通過iscomplate等待,卡介面--主線程在等待,邊等待邊提示
//( thread.sleep(200);位置變了,少了一句99.9999)
int i = 0;
while (!asyncresult.iscompleted)
%....");
}else
thread.sleep(200);
}console.writeline("中華民族復興已完成,沉睡的東方雄獅已覺醒!");
// 3 waitone等待,即時等待 限時等待
asyncresult.asyncwaithandle.waitone();//直接等待任務完成
asyncresult.asyncwaithandle.waitone(-1);//一直等待任務完成
asyncresult.asyncwaithandle.waitone(1000);//最多等待1000ms,超時就不等了
//4 endinvoke 即時等待, 而且可以獲取委託的返回值 乙個非同步操作只能end一次
action.endinvoke(asyncresult);//等待某次非同步呼叫操作結束
console.writeline("全部計算成功了。。");
funcfunc = () =>
;int iresult = func.invoke();//22
iasyncresult asyncresult = func.begininvoke(ar =>
, null);
int iendresult = func.endinvoke(asyncresult);//22
console.writeline($"****************btnasync_click end ***************");
}----------------------task------------------------------------------
1 thread:執行緒等待,**,前台執行緒/後台執行緒
2 threadpool:執行緒池使用,設定執行緒池,manualresetevent
3 擴充套件封裝thread&threadpool**/等待
1 task:waitall waitany delay
2 taskfactory:continuewhenany continuewhenall
3 並行運算parallel.invoke/for/foreach
thread
threadpool
threadpool.setmaxthreads(8,8) 執行緒池是全域性的,單例,同時併發8個;執行緒復用;
task
.netframework3.0 task 基於執行緒池的,提供了豐富的api
thread.task
task.sleep(300)
task
thread.sleep(2000);主線程等待2秒後在執行,卡畫面;
task.delay(2000).continuewith等待2秒後啟動新執行緒執行,不影響主線程;
task.delay(2000).continuewith(t=>);
1.什麼時候使用多執行緒:任務能併發時
2.多執行緒好處:提公升速度/優化體驗
3.waitall,waitany
4.continuewhenany(),continuewhenall()
主線程等待所有動作完成後執行的動作:task.waitall()
主線程等待任何乙個動作完成後執行的動作:task.waitany()
主線程等待所有動作完成後執行的動作:taskfactory.continuewhenall()
主線程任何乙個完成後執行的工作:taskfactory.continuewhenany(),
parall 併發執行多個action 多執行緒,主介面阻塞,主線程參入計算;
parall.for() 能控制併發數量;
parall.foreach()
paralleloption opt=new paralleloptions():控制線程併發數量如3;
C 幾種多執行緒使用總結
amethod,為該執行緒將要執行的任務 thread thread new thread amethod 設定為後台執行緒,不設定的話預設為前台執行緒 thread.isbackground true 啟動執行緒 thread.start 通過委託,呼叫begininvoke方法來開啟一條執行緒,...
多執行緒使用總結
多執行緒使用總結 基礎 1 最好使用c runtime的函式建立執行緒,即呼叫 beginthreadex建立執行緒。createthread 函式並不會執行c執行時資料塊的變數的每執行緒初始化,因此在任何使用c執行時庫的應用中,不能使用cratethread 函式。2 最好不要顯示的呼叫exitt...
c 多執行緒總結
std thread比較好用,但是系統帶的socket不能呼叫recv handle h thread createthread null,0,fun,null,0,null 建立多執行緒 closehandle h thread 使用者介面執行緒經常過載該函式,工作者執行緒一般不使用 initin...