欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# 多線(xiàn)程處理多個(gè)數(shù)據(jù)的方法

 更新時(shí)間:2021年03月31日 11:00:23   作者:conan  
這篇文章主要介紹了c# 多線(xiàn)程處理多個(gè)數(shù)據(jù)的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

概述

多線(xiàn)程(multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線(xiàn)程并發(fā)執(zhí)行的技術(shù)。具有多線(xiàn)程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線(xiàn)程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱(chēng)多處理機(jī)、多核心處理器以及芯片級(jí)多處理或同時(shí)多線(xiàn)程處理器。在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線(xiàn)程”(Thread),利用它編程的概念就叫作“多線(xiàn)程處理”。

隊(duì)列(Queue)代表了一個(gè)先進(jìn)先出的對(duì)象集合。當(dāng)您需要對(duì)各項(xiàng)進(jìn)行先進(jìn)先出的訪(fǎng)問(wèn)時(shí),則使用隊(duì)列。當(dāng)您在列表中添加一項(xiàng),稱(chēng)為入隊(duì),當(dāng)您從列表中移除一項(xiàng)時(shí),稱(chēng)為出隊(duì)。

比如平常我們?cè)谔幚矶〞r(shí)任務(wù)的時(shí)候,假設(shè)就一臺(tái)機(jī)器,我們不可能單線(xiàn)程一條一條數(shù)據(jù)的去跑,這時(shí)候就需要提高機(jī)器資源的利用率。

下面我們來(lái)介紹下,如何實(shí)現(xiàn)多線(xiàn)程+隊(duì)列以提高并發(fā)處理能力。

代碼實(shí)現(xiàn)

1、定義線(xiàn)程數(shù)threadNum和隊(duì)列queues

  /// <summary>
    /// 線(xiàn)程總數(shù)
    /// </summary>
    private int threadNum = 4;

    /// <summary>
    /// 總數(shù)
    /// </summary>
    private int totalCount = 0;

    /// <summary>
    /// 已處理
    /// </summary>
    private int index = 0;

    /// <summary>
    /// 隊(duì)列
    /// </summary>
    private ConcurrentQueue<AssetRepayment> queues = new ConcurrentQueue<AssetRepayment>();

2、定義線(xiàn)程列表,往線(xiàn)程添加數(shù)據(jù)

  public void SubDeTransaction()
    {
      var list = new List<AssetRepayment>();
      for (int i = 0; i < 1000; i++)
      {
        list.Add(new AssetRepayment() { Title = i.ToString() + "---" + Guid.NewGuid().ToString() });
      }

      if (list == null || list.Count() == 0)
      {
        Console.WriteLine("沒(méi)有可執(zhí)行的數(shù)據(jù)");
        return;
      }
      totalCount = list.Count;
      Console.WriteLine("可執(zhí)行的數(shù)據(jù):" + list.Count() + "條");
      foreach (var item in list)
      {
        queues.Enqueue(item);
      }
      List<Task> tasks = new List<Task>();
      for (int i = 0; i < threadNum; i++)
      {
        var task = Task.Run(() =>
        {
          Process();
        });
        tasks.Add(task);
      }
      var taskList = Task.Factory.ContinueWhenAll(tasks.ToArray(), (ts) =>
      {
      });
      taskList.Wait();
    }

3、對(duì)線(xiàn)程數(shù)進(jìn)行限制 for (int i = 0; i < threadNum; i++) 

  var taskList = Task.Factory.ContinueWhenAll(tasks.ToArray(), (ts) =>
      {
      });
      taskList.Wait();

4、從隊(duì)列取出數(shù)據(jù)進(jìn)行業(yè)務(wù)處理

  private void Process()
    {
      while (true)
      {
        var currentIndex = Interlocked.Increment(ref index);
        AssetRepayment repayId = null;
        var isExit = queues.TryDequeue(out repayId);
        if (!isExit)
        {
          break;
        }
        try
        {
          Console.WriteLine(repayId.Title);

          Console.WriteLine(string.Format(" 共{0}條 當(dāng)前第{1}條", totalCount, currentIndex));
        }
        catch (Exception ex)
        {
          Console.WriteLine(ex);
        }
      }
    }

代碼地址

https://gitee.com/conanOpenSource_admin/Example

以上就是c# 多線(xiàn)程處理多個(gè)數(shù)據(jù)的方法的詳細(xì)內(nèi)容,更多關(guān)于c# 多線(xiàn)程處理多個(gè)數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果

    C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#語(yǔ)言中條件與&&與條件或||的區(qū)別

    C#語(yǔ)言中條件與&&與條件或||的區(qū)別

    這篇文章主要介紹了&&:邏輯與,前后條件同時(shí)滿(mǎn)足表達(dá)式為真 ||:邏輯或,前后條件只要有一個(gè)滿(mǎn)足表達(dá)式為真,下面結(jié)合案例給大家介紹,需要的朋友可以參考下
    2015-07-07
  • C# 批處理調(diào)用方法

    C# 批處理調(diào)用方法

    當(dāng)批處理和aspx不在同一目錄中時(shí),最好用WorkingDirectory設(shè)置啟動(dòng)的進(jìn)程的初始目錄為批處理所在目錄,否則如上例中批處理新建的目錄就應(yīng)在aspx所在目錄中而不是批處理所在目錄了!
    2008-12-12
  • C#基于百度AI實(shí)現(xiàn)機(jī)器翻譯功能

    C#基于百度AI實(shí)現(xiàn)機(jī)器翻譯功能

    眾所周知,基于百度ai開(kāi)發(fā)平臺(tái)我們可以實(shí)現(xiàn)了人臉識(shí)別、文字識(shí)別 、語(yǔ)音識(shí)別等功能。本文將介紹它的另一個(gè)功能,即實(shí)現(xiàn)機(jī)器翻譯,感興趣的可以了解一下
    2022-01-01
  • C# Memcached緩存用法實(shí)例詳解

    C# Memcached緩存用法實(shí)例詳解

    這篇文章主要介紹了C#中Memcached緩存用法,以實(shí)例形式詳細(xì)講述了在C#中針對(duì)Memcached緩存的各種操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C# 拼圖魔方小游戲

    C# 拼圖魔方小游戲

    這篇文章主要介紹了C# 拼圖魔方小游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • WCF實(shí)現(xiàn)的計(jì)算器功能實(shí)例

    WCF實(shí)現(xiàn)的計(jì)算器功能實(shí)例

    這篇文章主要介紹了WCF實(shí)現(xiàn)的計(jì)算器功能,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了WCF實(shí)現(xiàn)計(jì)算器功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • C# 調(diào)用FFmpeg處理音視頻的示例

    C# 調(diào)用FFmpeg處理音視頻的示例

    這篇文章主要介紹了C# 調(diào)用FFmpeg處理音視頻的示例,幫助大家更好的利用c# 處理音視頻,感興趣的朋友可以了解下
    2020-12-12
  • C#?RabbitMQ的使用詳解

    C#?RabbitMQ的使用詳解

    本文主要介紹了C#?RabbitMQ的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C# PropertyGrid使用案例詳解

    C# PropertyGrid使用案例詳解

    這篇文章主要介紹了C# PropertyGrid使用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評(píng)論