在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

掌握多線程技術

li5236 ? 來源:dotNet工控上位機 ? 作者:dotNet工控上位機 ? 2022-03-29 14:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

初學者學習編程時,很容易因為多線程出現各種問題,導致不敢使用多線程。但是多線程技術在做開發中,是不可忽視的一個技術,基本上我們實際應用中,每個項目都會使用多線程,所以多線程技術必須掌握。

為什么要用多線程

隨著工業的進步,現在的筆記本、臺式機大都是雙核的,4核、8核甚至16核,也很常見,如果是單線程的程序,那么在雙核CPU上就浪費了50%,在4核CPU上就浪費了75%。

單核CPU上所謂的”多線程”那是假的多線程,同一時間處理器只會處理一段邏輯,只不過線程之間切換得比較快,看著像多個線程”同時”運行罷了。

多核CPU上的多線程才是真正的多線程,它能讓你的多段邏輯同時工作,多線程,可以真正發揮出多核CPU的優勢來,達到充分利用CPU的目的。

如果你做項目不使用多線程,不僅是技術的問題,也是對電腦資源的極大浪費,就像你買了一輛配置非常高的越野車,你僅僅只用它來日常代步一樣。3

為什么不敢用多線程

之前跟一些學員溝通時發現,很多學員之所以不敢使用多線程,是因為之前出過問題,有種“一朝被蛇咬,十年怕井繩”的感覺。

為什么多線程容易出問題,有個主要的原因在于多線程充滿著“未知性”,有的人使用時,發現代碼并沒有按照預想的流程在走,這其實是正常的。

我們必須要明確一點,多線程確實是“不可控的”,有某種意義上來說,多線程是靠CPU調度來執行的,并非人為去控制。

我們所謂的控制多線程,僅僅是.NET框架開放了一些接口開發者,這樣可以相對性地間接控制多線程的啟動停止暫停繼續。

線程的啟動停止

線程的啟動停止,從.Net Framework 4.5開始,Task提供了一個叫CancellationTokenSource的對象,可以使用它來對多線程的啟停進行控制。

首先,我們做一個線程任務,這個任務很簡單,只是不斷操作某個變量,每0.1秒加1,到一定值之后,重置為0,然后將這個值顯示在界面上,界面如下所示:

pYYBAGJCommAHohAAAEBK_S4MA8205.png

所以任務方法如下:

poYBAGJCommAUQsFAAFCzNteiYk911.png

個對象就是CancellationTokenSource的對象,因此我們需要創建一個CancellationTokenSource對象cts:

pYYBAGJCommAeFBDAAByrWJa05o840.png

然后在啟動線程按鈕的事件里,編寫代碼如下:

poYBAGJCommALjvEAAC33LkZg20419.png

停止線程按鈕的事件里,只需要調用cts的Cancel方法即可:

pYYBAGJCommAfnHqAACJjBQEKQs412.png

其實,說白了,就是通過cts來控制cts的IsCancellationRequested屬性,進而實現多線程的控制。

線程的暫停繼續

多線程的暫停繼續,.NET為我們提供了另外一個對象——ManualResetEvent,這個對象會有一個值,這個值是布爾類型,就像一個門閘一樣,True是打開門閘,False是關閉門閘,所以想要暫停多線程就調用這個對象的Reset方法,想要繼續多線程就調用這個對象的Set方法,使用非常簡單。

首先我們創建一下這個對象,可以通過構造方法,給這個對象賦初始值,我這里為True,這樣就能直接運行,不會阻塞。

poYBAGJCommAFYwjAACT6iBUZqo649.png

但是如果希望這個對象與多線程有所聯系,必須要在多線程的方法里體現這個對象的作用,這個是調用這個對象的WaitOne方法,表示在調用的地方阻塞住,通過判斷True或者False來決定是否繼續執行,就像大家開車過高速收費站一樣,即使現在普遍采用ETC了,在入口也需要減速,有一個ETC識別的過程,識別成功才會抬桿,識別識別,桿子是不會自動抬起的,這個是一樣的道理。

所以線程執行代碼如下:

pYYBAGJComqAQ0XgAACDmtYVuHw124.png

對比一下,其實就是加了一個manual.WaitOne()。

線程暫停代碼:

poYBAGJComqAWj-YAAAuPKiIW90610.png

線程繼續代碼:

pYYBAGJComqACdzRAAB-g448phs190.png

AutoResetEvent

AutoResetEvent和ManualResetEvent的用法非常相似,區別在于一個是手動,一個是自動,AutoResetEvent會在置位之后自動復位,這樣體現在多線程里,就是會只執行一次,就像大家進小區一樣,如果有10輛車在排隊,這時候如果自動模式,每次只能進一輛車,如果是手動模式,可以由保安控制門閘打開,等10輛車都進去之后,再由保安將門閘關注。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 多線程
    +關注

    關注

    0

    文章

    279

    瀏覽量

    20359
  • 代碼
    +關注

    關注

    30

    文章

    4891

    瀏覽量

    70405
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    多線程的安全注意事項

    多線程安全是指多個線程同時訪問或修改共享資源時,能夠保證程序的正確性和可靠性。 開發者選擇TaskPool或Worker進行多線程開發時,在TaskPool和Worker的工作線程中導
    發表于 06-20 07:49

    工控一體機多線程任務調度優化:聚徽分享破解工業復雜流程高效協同密碼

    在當今工業 4.0 的浪潮下,工業生產正朝著高度自動化、智能化的方向大步邁進。生產流程日益復雜,眾多任務需要同時、高效地協同執行,這對工業控制系統的核心 —— 工控一體機提出了前所未有的挑戰。多線程
    的頭像 發表于 05-28 14:06 ?122次閱讀

    2.4 GHz 前端模塊 (FEM),用于 Zigbee 技術線程和設備,具有適合藍牙?應用的端口 skyworksinc

    電子發燒友網為你提供()2.4 GHz 前端模塊 (FEM),用于 Zigbee 技術線程和設備,具有適合藍牙?應用的端口相關產品參數、數據手冊,更有2.4 GHz 前端模塊 (FEM),用于
    發表于 05-15 18:30
    2.4 GHz 前端模塊 (FEM),用于 Zigbee <b class='flag-5'>技術</b>、<b class='flag-5'>線程</b>和設備,具有適合藍牙?應用的端口 skyworksinc

    一種實時多線程VSLAM框架vS-Graphs介紹

    針對現有VSLAM系統語義表達不足、地圖可解釋性差的問題,本文提出vS-Graphs,一種實時多線程VSLAM框架。該方案顯著提升了重建地圖的語義豐富度、可解釋性及定位精度。實驗表明
    的頭像 發表于 04-19 14:07 ?337次閱讀
    一種實時<b class='flag-5'>多線程</b>VSLAM框架vS-Graphs介紹

    進程、線程、協程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!

    各位程序員朋友(和假裝懂技術的同事):如果你在面試時被問到:\"請用奶茶店類比進程、線程和協程\",而你回答:\"進程是老板,線程是員工,協程是兼職...\"
    發表于 03-26 09:27

    請問如何在Python中實現多線程與多進程的協作?

    大家好!我最近在開發一個Python項目時,需要同時處理多個任務,且每個任務需要不同的計算資源。我想通過多線程和多進程的組合來實現并發,但遇到了一些問題。 具體來說,我有兩個任務,一個是I/O密集型
    發表于 03-11 06:57

    請問rt-thread studio如何進行多線程編譯?

    ,使用的是5800h+32g內存+sn550 ssd,開啟16線程編譯時cpu的占用率也只能到30%,編譯完整個工程需要3分鐘 感覺多線程編譯設置沒有生效,有辦法提高編譯速度嗎
    發表于 02-19 08:30

    華為云 X 實例 CPU 性能測試詳解與優化策略

    ? 2.2 Sysbench單線程CPU性能測試 ? 2.3 Sysbench多線程CPU性能測試(4線程) ? 2.4 高強度多線程CPU性能測試(8
    的頭像 發表于 12-30 14:52 ?611次閱讀
    華為云 X 實例 CPU 性能測試詳解與優化策略

    socket 多線程編程實現方法

    在現代網絡編程中,多線程技術被廣泛應用于提高服務器的并發處理能力。Socket編程是網絡通信的基礎,而將多線程技術應用于Socket編程,可以顯著提升服務器的性能。
    的頭像 發表于 11-12 14:16 ?947次閱讀

    Python中多線程和多進程的區別

    Python作為一種高級編程語言,提供了多種并發編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進程的概念、區別以及如何使用線程池與進程池來提高并發執行效率。
    的頭像 發表于 10-23 11:48 ?961次閱讀
    Python中<b class='flag-5'>多線程</b>和多進程的區別

    CPU線程和程序線程的區別

    CPU的線程與程序的線程在概念、作用、實現方式以及性能影響等方面存在顯著差異。以下是對兩者區別的詳細闡述,旨在深入探討這一技術話題。
    的頭像 發表于 09-02 11:18 ?2028次閱讀

    一文掌握Python多線程

    使用線程可以把占據長時間的程序中的任務放到后臺去處理。
    的頭像 發表于 08-05 15:46 ?1216次閱讀

    LWIP多線程強烈建議開啟LWIP_ASSERT_CORE_LOCKED宏,這個在RTT里面要怎么實現?

    LWIP多線程強烈建議開啟LWIP_ASSERT_CORE_LOCKED宏,這個在RTT里面要怎么實現,之前參考網上代碼,這樣寫,壓力測試下有概率斷言失敗 extern sys_mutex_t
    發表于 07-25 06:27

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發表于 07-19 08:05

    多線程設計模式到對 CompletableFuture 的應用

    最近在開發 延保服務 頻道頁時,為了提高查詢效率,使用到了多線程技術。為了對多線程方案設計有更加充分的了解,在業余時間讀完了《圖解 Java 多線程設計模式》這本書,覺得收獲良多。本篇
    的頭像 發表于 06-26 14:18 ?650次閱讀
    從<b class='flag-5'>多線程</b>設計模式到對 CompletableFuture 的應用
    主站蜘蛛池模板: 成人牲交一极毛片 | 深夜动态福利gif动态进 | 日韩亚射| 日韩高清特级特黄毛片 | a理论片 | 欧美午夜在线播放 | 亚洲4区| 看真人一级毛片 | 免费色视频 | 在线天堂bt中文www在线 | 4虎最新地址 | 美女视频永久黄网站免费观看国产 | 午夜精品久久久久久久2023 | 日本在线不卡免 | a成人在线 | 激情婷婷在线 | 亚洲成色www久久网站 | 狠狠色狠狠色综合日日小蛇 | 四虎最新紧急入口4hu | 国产综合在线观看 | 日本黄色大片免费观看 | 天天成人综合网 | 网友偷自拍原创区 | 爽爽爽爽爽爽a成人免费视频 | 午夜影院免费版 | www.亚洲成人 | 精品三级在线观看 | 午夜久久久精品 | 欧美三页 | xxxxxx日本人免费 | 在线色国产| 操美女网址 | 天天在线天天在线天天影视 | 99国产成人精品2021 | 美女被拍拍拍拍拍拍拍拍 | 色接久久| 色成人综合网 | avtt亚洲一区中文字幕 | 色天使在线播放 | 就去色综合 | 好大好硬好长好爽a网站 |