• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于C#線程實(shí)驗(yàn)探究

      2021-06-28 10:59:54劉毓聶思兵楊濟(jì)寧
      山西電子技術(shù) 2021年3期
      關(guān)鍵詞:進(jìn)度條內(nèi)江線程

      劉毓,聶思兵,楊濟(jì)寧

      (1.內(nèi)江師范學(xué)院計(jì)算機(jī)科學(xué)學(xué)院(人工智能學(xué)院),四川 內(nèi)江 641100;2.珠海博聞教育科技發(fā)展有限公司,廣東 珠海 519000;3.內(nèi)江職業(yè)技術(shù)學(xué)院,四川 內(nèi)江 641111)

      1 概述

      程序執(zhí)行流的最小執(zhí)行單位,是行程中的實(shí)際運(yùn)作單位,是進(jìn)程中的實(shí)際運(yùn)作單位[1];是進(jìn)程中按順序執(zhí)行的控制流,每條線程承擔(dān)各自的任務(wù),一個進(jìn)程中可以并發(fā)多個線程[2]。線程間通信主要通過共享內(nèi)存,上下文切換很快,資源開銷較少,但相比進(jìn)程不夠穩(wěn)定容易丟失數(shù)據(jù)。

      為提高程序的可靠性,簡化編程代碼,實(shí)現(xiàn)程序并發(fā)執(zhí)行線程,線程采用代碼與代碼之間的隔離技術(shù)。由此可見,合理安排線程實(shí)驗(yàn),對于C# 的實(shí)驗(yàn)有重要意義。

      討論C#線程實(shí)驗(yàn),目的就是通過實(shí)驗(yàn)讓學(xué)生掌握線程的創(chuàng)建與控制,包括創(chuàng)建線程、暫停和恢復(fù)線程、終止線程、設(shè)置線程執(zhí)行的優(yōu)先級,線程的同步方法。

      2 C# 實(shí)現(xiàn)線程的常用方式

      2.1 Thread類實(shí)現(xiàn)

      在C#語言中線程(Thread)是包含在進(jìn)程中的,它位于 System.Threading 命名空間中,線程的創(chuàng)建以及執(zhí)行使用hread 類。

      Thread類的實(shí)現(xiàn)方式,關(guān)鍵代碼如下:

      public void TestThread()

      {

      Thread thread = new Thread( TestAction);

      //設(shè)置屬性

      thread.IsBackground = true;

      thread.Name = "Test";

      //啟動線程 thread.Start();

      }

      private void TestAction()

      {

      //處理相關(guān)業(yè)務(wù)

      }

      主要操作步驟為:設(shè)置相關(guān)屬性new Thread(TestAction);啟動 thread.Start();處理的相關(guān)業(yè)務(wù);執(zhí)行相關(guān)業(yè)務(wù)操作等。

      2.2 ThreadPool 線程池實(shí)現(xiàn)

      需要創(chuàng)建的線程很多,且都是比較小的線程的情況下,可以使用線程池(ThreadPool類)。ThreadPool是一個靜態(tài)方法,提供了對一個線程集合的操作,它會在線程數(shù)不足時增加線程,空閑線程數(shù)過多時釋放資源。ThreadPool 線程池實(shí)現(xiàn)的關(guān)鍵,有如下幾步:

      設(shè)置相關(guān)屬性;通過線程池自動分配線程執(zhí)行對應(yīng)的業(yè)務(wù)功能;實(shí)現(xiàn)線程處理的相關(guān)業(yè)務(wù);執(zhí)行相關(guān)業(yè)務(wù)操作等。

      2.3 Delegate 實(shí)現(xiàn)的多線程

      delegate由于需要不斷的實(shí)例化,委托類將會消耗cup 和內(nèi)存,其關(guān)鍵代碼如下:

      private void TestAction()

      {

      //處理相關(guān)業(yè)務(wù)

      }

      ///

      ///子線程回調(diào)

      ///

      private void CallBack(IAsyncResultar)

      {

      }

      除此之外,還有Task 實(shí)現(xiàn)多線程,Parallel實(shí)現(xiàn)多線程等方式,這里不一一贅述。

      3 C#線程實(shí)驗(yàn)的注意事項(xiàng)

      在C#線程編程實(shí)踐發(fā)現(xiàn),單線程最顯著的缺點(diǎn)是,當(dāng)一個事件發(fā)生,程序進(jìn)行一個耗時的運(yùn)算動作時,UI線程會出現(xiàn)假死現(xiàn)象,此時會無視對用戶的響應(yīng)。多個執(zhí)行流是多線程的特點(diǎn),因此為了充分提高CPU的利用率。一個程序中可以同時運(yùn)行和創(chuàng)建多個并行執(zhí)行的線程來完成各自的任務(wù)。

      在多線程程序中,線程的運(yùn)行相互獨(dú)立,互不干擾,從而提高程序的效率。但使用多線程存在諸多不利因素,線程越多占用內(nèi)存也越多,線程越多協(xié)調(diào)和管理越麻煩, CPU需要花更多的時間,也存在訪問共享資源時會彼此干擾,從而導(dǎo)致對他們的控制過程太復(fù)雜。以下兩個問題也得一起注意:

      3.1 操縱一個線程出現(xiàn)的異常

      利用Thread.Start()方法重新啟動線程oThread,但顯然Abort()方法帶來的后果是不可恢復(fù)的終止線程,所以最后程序會拋出ThreadStateException異常。其關(guān)鍵內(nèi)容包括:

      創(chuàng)建一個線程,使之執(zhí)行Beta方法 ,該方法只是通知CPU此線程可以被執(zhí)行,但具體執(zhí)行時機(jī)則由CPU自行決定。

      3.2 線程的優(yōu)先級設(shè)置

      線程的優(yōu)先級設(shè)置應(yīng)滿足以下原則:

      1)當(dāng)線程之間同時需要CPU時,CPU按線程的優(yōu)先級給予服務(wù)。

      2)C#設(shè)計(jì)中,在創(chuàng)建線程時,可以設(shè)置5個不同的線程的優(yōu)先級,不指定優(yōu)先級,則系統(tǒng)為默認(rèn)值ThreadPriority.Normal。

      根據(jù)用戶的響應(yīng)輕重緩急,設(shè)置相應(yīng)的線程的優(yōu)先級,同時CPU會將更多的時間片分給優(yōu)先級高的線程,在相同任務(wù)量的前提下,高優(yōu)先級線程將會較快地完成任務(wù)。

      4 C#多線程的典型應(yīng)用實(shí)驗(yàn)

      多線程編程應(yīng)用廣泛,主要有幾個方面:

      1)即時響應(yīng),后臺線程完成特定操作。

      2)多個線程參與,完成同類任務(wù),提高并發(fā)性能。

      3)一個任務(wù)可以有多個獨(dú)立的步驟,多個線程可以并發(fā)執(zhí)行各子任務(wù),以用來提高任務(wù)處理效率,下面通過兩個例子予以說明。

      a)進(jìn)度條

      圖1 系統(tǒng)方框圖

      分析:頁面動態(tài)刷新,在主頁面正常操作前提下,用后臺線程來實(shí)現(xiàn)進(jìn)度條。

      首先,創(chuàng)建Winform頁面,然后拖入進(jìn)度條控件,篇幅關(guān)系,相關(guān)代碼從略。

      b)網(wǎng)絡(luò)扒蟲

      獲取網(wǎng)絡(luò)資源,網(wǎng)絡(luò)搜索功能實(shí)現(xiàn),都利用了扒蟲程序思想。一般情況下,扒蟲程序耗時大,如果使用多線程編程,將節(jié)約許多時間。篇幅關(guān)系,相關(guān)代碼從略。

      5 總結(jié)

      前面就C#實(shí)現(xiàn)線程的常用方式,C#線程的實(shí)驗(yàn)的注意事項(xiàng),C#多線程的典型應(yīng)用實(shí)驗(yàn)做了初步的討論,關(guān)于C#線程實(shí)驗(yàn)注意的問題還很多,由于篇幅所限,這里不一一贅述。

      文中的部分案例來自網(wǎng)絡(luò),由于出處較多,在此一并向作者致謝!

      猜你喜歡
      進(jìn)度條內(nèi)江線程
      水管接水
      詩潮(2025年2期)2025-03-06 00:00:00
      平安內(nèi)江,幸福的港灣
      四川內(nèi)江:青花椒成為增收新引擎
      為什么進(jìn)度條到99%就不動了
      旗幟文摘(2020年5期)2020-06-09 12:20:12
      為什么進(jìn)度條到99%就不動了
      意林(2020年10期)2020-06-01 07:26:37
      為什么進(jìn)度條到99%就不動了
      知識窗(2020年3期)2020-04-02 07:08:28
      內(nèi)江本土優(yōu)秀傳統(tǒng)文化傳承發(fā)展問題研究
      淺談linux多線程協(xié)作
      內(nèi)江市中區(qū)聯(lián)社:做“小微”金融服務(wù)專業(yè)銀行
      Linux線程實(shí)現(xiàn)技術(shù)研究
      沾化县| 怀集县| 徐汇区| 沾化县| 绍兴县| 涟源市| 华阴市| 越西县| 当雄县| 酒泉市| 靖边县| 襄垣县| 迁安市| 巨鹿县| 右玉县| 太仆寺旗| 乐清市| 兰西县| 宁波市| 义乌市| 腾冲县| 东兴市| 台前县| 建阳市| 土默特右旗| 雷山县| 阳东县| 宁陵县| 泰州市| 松桃| 类乌齐县| 江达县| 荣成市| 怀安县| 镇巴县| 鹰潭市| 噶尔县| 瑞金市| 玛纳斯县| 枣阳市| 邮箱|