色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

掌握多線程技術(shù)

li5236 ? 來源:dotNet工控上位機 ? 作者:dotNet工控上位機 ? 2022-03-29 14:08 ? 次閱讀

前言

初學(xué)者學(xué)習(xí)編程時,很容易因為多線程出現(xiàn)各種問題,導(dǎo)致不敢使用多線程。但是多線程技術(shù)在做開發(fā)中,是不可忽視的一個技術(shù),基本上我們實際應(yīng)用中,每個項目都會使用多線程,所以多線程技術(shù)必須掌握。

為什么要用多線程

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

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

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

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

為什么不敢用多線程

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

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

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

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

線程的啟動停止

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

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

pYYBAGJCommAHohAAAEBK_S4MA8205.png

所以任務(wù)方法如下:

poYBAGJCommAUQsFAAFCzNteiYk911.png

個對象就是CancellationTokenSource的對象,因此我們需要創(chuàng)建一個CancellationTokenSource對象cts:

pYYBAGJCommAeFBDAAByrWJa05o840.png

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

poYBAGJCommALjvEAAC33LkZg20419.png

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

pYYBAGJCommAfnHqAACJjBQEKQs412.png

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

線程的暫停繼續(xù)

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

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

poYBAGJCommAFYwjAACT6iBUZqo649.png

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

所以線程執(zhí)行代碼如下:

pYYBAGJComqAQ0XgAACDmtYVuHw124.png

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

線程暫停代碼:

poYBAGJComqAWj-YAAAuPKiIW90610.png

線程繼續(xù)代碼:

pYYBAGJComqACdzRAAB-g448phs190.png

AutoResetEvent

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    19943
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68525
收藏 人收藏

    評論

    相關(guān)推薦

    socket 多線程編程實現(xiàn)方法

    在現(xiàn)代網(wǎng)絡(luò)編程中,多線程技術(shù)被廣泛應(yīng)用于提高服務(wù)器的并發(fā)處理能力。Socket編程是網(wǎng)絡(luò)通信的基礎(chǔ),而將多線程技術(shù)應(yīng)用于Socket編程,可以顯著提升服務(wù)器的性能。
    的頭像 發(fā)表于 11-12 14:16 ?339次閱讀

    Python中多線程和多進程的區(qū)別

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

    一文掌握Python多線程

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

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

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

    多線程設(shè)計模式到對 CompletableFuture 的應(yīng)用

    最近在開發(fā) 延保服務(wù) 頻道頁時,為了提高查詢效率,使用到了多線程技術(shù)。為了對多線程方案設(shè)計有更加充分的了解,在業(yè)余時間讀完了《圖解 Java 多線程設(shè)計模式》這本書,覺得收獲良多。本篇
    的頭像 發(fā)表于 06-26 14:18 ?343次閱讀
    從<b class='flag-5'>多線程</b>設(shè)計模式到對 CompletableFuture 的應(yīng)用

    bootloader開多線程做引導(dǎo)程序,跳app初始化后直接進hardfualt,為什么?

    如標題,想做一個遠程升級的項目,bootloader引導(dǎo)區(qū)域和app都是開多線程跑的,就是自己寫了個小的任務(wù)調(diào)度器,沒什么功能主要是想讓程序快速的響應(yīng),延時不會對其他程序造成堵塞,程序測試
    發(fā)表于 04-18 06:07

    鴻蒙OS開發(fā)實例:【ArkTS類庫多線程CPU密集型任務(wù)TaskPool】

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計算能力的任務(wù),需要長時間運行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。 基于多線程并發(fā)機制處理CPU密集型任務(wù)可以提高CPU
    的頭像 發(fā)表于 04-01 22:25 ?832次閱讀
    鴻蒙OS開發(fā)實例:【ArkTS類庫<b class='flag-5'>多線程</b>CPU密集型任務(wù)TaskPool】

    鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對比

    TaskPool(任務(wù)池)和Worker的作用是為應(yīng)用程序提供一個多線程的運行環(huán)境,用于處理耗時的計算任務(wù)或其他密集型任務(wù)。可以有效地避免這些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降低整體資源消耗,并提高系統(tǒng)的整體性能。
    的頭像 發(fā)表于 03-26 22:09 ?609次閱讀
    鴻蒙APP開發(fā):【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程I/O密集型任務(wù)開發(fā)

    使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會阻塞線程中其它任務(wù)的執(zhí)行,這時需要使用多線程并發(fā)能力來進行解決。 I/O密集型任務(wù)的性能重點通常不在于CPU的處理
    發(fā)表于 03-21 14:57

    java實現(xiàn)多線程的幾種方式

    Java實現(xiàn)多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執(zhí)行不同的任務(wù)或操作。Java中的多線程可以提高程序
    的頭像 發(fā)表于 03-14 16:55 ?687次閱讀

    AT socket可以多線程調(diào)用嗎?

    請問AT socket 可以多線程調(diào)用嗎? 有互鎖機制嗎,還是要自己做互鎖。
    發(fā)表于 03-01 08:22

    什么是多核多線程?多核多線程如何提高程序的運行效率?

    線程無法充分利用多核處理器的并行計算能力。
    的頭像 發(fā)表于 02-20 10:22 ?1350次閱讀

    linux多線程編程實例

    linux線程
    的頭像 發(fā)表于 02-15 21:16 ?457次閱讀
    linux<b class='flag-5'>多線程</b>編程實例

    Redis7單線程多線程詳解

    主要是指Redis的網(wǎng)絡(luò)IO和鍵值對讀寫是由一個線程來完成的。
    的頭像 發(fā)表于 01-16 17:33 ?1848次閱讀
    Redis7單<b class='flag-5'>線程</b>與<b class='flag-5'>多線程</b>詳解

    報名啟動|OpenHarmony源碼轉(zhuǎn)換器—多線程特性轉(zhuǎn)換賽題

    點擊藍字 ╳ 關(guān)注我們 開源項目 OpenHarmony 是每個人的 OpenHarmony 原文標題:報名啟動|OpenHarmony源碼轉(zhuǎn)換器—多線程特性轉(zhuǎn)換賽題 文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
    的頭像 發(fā)表于 12-29 16:15 ?705次閱讀
    報名啟動|OpenHarmony源碼轉(zhuǎn)換器—<b class='flag-5'>多線程</b>特性轉(zhuǎn)換賽題
    主站蜘蛛池模板: 青青草原网址| 99精品视频免费观看| 日本粉嫩学生毛绒绒| 空姐厕所啪啪啪| 亚洲AV无码专区国产乱码网站| 国产中文视频| 观赏女性排尿| 成人a视频片在线观看免费| 100国产精品人妻无码| 色戒床震视频片段| 人人碰在线视频| 青青青久久| 日韩精品人成在线播放| 东北真实仑乱| 在线免费观看国产| 中文字幕亚洲综合小综合在线| 野花日本韩国视频免费高清观看| 男生J桶进女人P又色又爽又黄| 久久人人玩人妻潮喷内射人人| 久爱精品亚洲电影午夜| 久艾草在线精品视频在线观看| 久久99热这里只频精品6| 久久黄色录像| 国产乱码卡二卡三卡4W | 美女教师朝桐光在线播放| 国产精品人成视频免费999| 99E久热只有精品8在线直播| 最近免费中文字幕大全免费| 1000部做羞羞事禁片免费视频网站| 中文字幕无码A片久久| 午夜性伦鲁啊鲁免费视频| 午夜亚洲WWW湿好大| 小向美奈子厨房magnet| 亚洲妈妈精品一区二区三区| 亚洲日产2020乱码草莓毕| 思思久99久女女精品| 午夜AV亚洲一码二中文字幕青青| 午夜国产精品影院在线观看| 亚洲精品国产精品精| 又色又爽又黄gif动态视频| 99久久久无码国产精精品|