日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异步调用与多线程

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异步调用与多线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異步調用并不是要減少線程的開銷, 它的主要目的是讓調用方法的主線程不需要同步等待在這個函數調用上, 從而可以讓主線程繼續執行它下面的代碼.與此同時, 系統會通過從ThreadPool中取一個線程來執行,幫助我們將我們要寫/讀的數據發送到網卡.由于不需要我們等待, 我們等于同時做了兩件事情. 這個效果跟自己另外啟動一個線程來執行等待方式的寫操作是一樣的.但是, 異步線程可以利用操作系統/.Net的線程池, 系統可以根據吞吐量動態的管理線程池的大小.

=======================================================================
異步與多線程,從辯證關系上來看,異步和多線程并不時一個同等關系,異步是目的,多線程只是我們實現異步的一個手段.什么是異步:異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回.實現異步可以采用多線程技術或則交給另外的進程來處理
=========================================================================
線程池的實現方法與線程是不一樣的.初始化時在線程池里的線程為0.當進程需要一個線程時,創建一個線程,由此線程執行用戶的方法.需要注意的是,此線程執行完后并不立即銷毀,而是掛起等待,如果有其他方法需要執行,回喚醒進行處理.只有當它等到40秒(沒有官方記錄,有可能是其它數字)還沒有任務執行時才喚醒自己,并銷毀自己,釋放資源.當然,如果線程池中的線程不夠處理任務時,會再次創建一個新線程進行執行.

異步有的時候用普通的線程,有的時候用系統的異步調用功能。有一些IO操作也是異步的,但是未必需要一個線程來運行。例如:硬件是有DMA功能的,在調用DMA傳輸數據的時候,CPU是不需要執行處理的,只需要發起傳輸和等待傳輸結束即可。具體到.net平臺,比如Socket的BeginSend,如果是運行在Windows??? 2000以后的平臺,在底層就會調用異步的完成端口來發送。

.Net中的異步執行其實使用的是異步委托。異步委托將要執行的方法提交到.net的線程池,由線程池中的線程來執行異步方法。

異步執行也得執行,不在當前線程執行,當然得去另外一個線程執行。異步通常用系統線程池的線程,通常情況下性能好些。(因為可以多次利用,申請時不需要重新申請一個線程,只需要從池里取就行了。)異步是一種效果,多線程是一種具體技術。可以說,用“多線程”實現“異步”。

異步和多線程是兩個不同的概念,不能這樣比較.異步請求一般用在IO等耗時操作上,他的好處是函數調用立即返回,相應的工作線程立即返還給系統以供重用。由于系統的線程資源是非常寶貴的,通常有一定的數目限制,如.net默認是25。若使用異步方式,用這些固定數目的線程在固定的時間內就可以服務更多的請求,而如果用同步方式,那么每個請求都自始至終占用這一個線程,服務器可以同時服務的請求數就少了。當異步操作執行完成后,系統會從可用線程中選取一個執行回調程序,這時的這個線程可能是剛開始發出請求的那個線程,也可能是其他的線程,因為系統選取線程是隨機的事情,所以不能說絕對不是剛開始的那個線程。多線程是用來并發的執行多個任務。

不過有個問題,異步有時優先級比主線程還高。這個特點和多線程不同。

轉載于:https://www.cnblogs.com/yibinboy/archive/2009/12/28/1634590.html

總結

以上是生活随笔為你收集整理的异步调用与多线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。