服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#多线程处理多个队列数据的方法

C#多线程处理多个队列数据的方法

2022-11-22 11:45conan C#

本文将结合实例代码,介绍C#多线程处理多个队列数据的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

概述

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。

队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。

比如平常我们在处理定时任务的时候,假设就一台机器,我们不可能单线程一条一条数据的去跑,这时候就需要提高机器资源的利用率。

下面我们来介绍下,如何实现多线程+队列以提高并发处理能力。

代码实现

1、定义线程数threadNum和队列queues

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// <summary>
        /// 线程总数
        /// </summary>
        private int threadNum = 4;
 
        /// <summary>
        /// 总数
        /// </summary>
        private int totalCount = 0;
 
        /// <summary>
        /// 已处理
        /// </summary>
        private int index = 0;
 
        /// <summary>
        /// 队列
        /// </summary>
        private ConcurrentQueue<AssetRepayment> queues = new ConcurrentQueue<AssetRepayment>();

2、定义线程列表,往线程添加数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void SubDeTransaction()
        {
            var list = new List<AssetRepayment>();
            for (int i = 0; i < 1000; i++)
            {
                list.Add(new AssetRepayment() { id="codetool">

3、对线程数进行限制 for (int i = 0; i < threadNum; i++)

?
1
2
3
4
var taskList = Task.Factory.ContinueWhenAll(tasks.ToArray(), (ts) =>
            {
            });
            taskList.Wait();

4、从队列取出数据进行业务处理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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}条 当前第{1}条", totalCount, currentIndex));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }

运行测试

C#多线程处理多个队列数据的方法

代码地址

https://gitee.com/conanOpenSource_admin/Example

到此这篇关于C#多线程处理多个队列数据的方法的文章就介绍到这了,更多相关C#多线程处理多个队列数据的方法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://developer.51cto.com/art/202106/666040.htm

延伸 · 阅读

精彩推荐
  • C#C#打开扬声器的实操方法和代码

    C#打开扬声器的实操方法和代码

    在本篇文章中我们给大家分享的是关于C#如何打开扬声器的相关知识点内容,需要的读者们学习下。...

    ITMFB7632022-07-31
  • C#C#如何连接MySQL数据库

    C#如何连接MySQL数据库

    这篇文章主要介绍了C#如何连接MySQL数据库,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...

    千里Z单骑11012022-10-11
  • C#C# 字符串、数组和List的截取和转换实例

    C# 字符串、数组和List的截取和转换实例

    下面小编就为大家分享一篇C# 字符串、数组和List的截取和转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    杜子烟8982022-02-10
  • C#C#绘制飞行棋地图小程序

    C#绘制飞行棋地图小程序

    这篇文章主要介绍了C#绘制飞行棋地图小程序的相关资料,非常不错,具有参考借鉴价值,对c飞行棋地图相关知识感兴趣的朋友一起看看吧...

    电杆7882021-12-06
  • C#C#中Equals和GetHashCode使用及区别

    C#中Equals和GetHashCode使用及区别

    这篇文章主要介绍了C#中Equals和GetHashCode使用及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    HueiFeng7022022-08-24
  • C#详解C#之委托

    详解C#之委托

    这篇文章主要介绍了C#委托的含义以及用法,文中代码非常详细,帮助大家更好的理解和学习...

    千金不如一默3462022-09-09
  • C#C# 设计模式系列教程-原型模式

    C# 设计模式系列教程-原型模式

    原型模式隐藏了对象的创建细节,对有些初始化需要占用很多资源的类来说,对性能也有很大提高。...

    Wang Juqiang6582021-11-23
  • C#C#影院售票系统毕业设计(2)

    C#影院售票系统毕业设计(2)

    这篇文章主要介绍了C#影院售票系统毕业设计,介绍了电影院座位的动态绘制、电影信息绑定到窗体中如何展现出来,需要的朋友可以参考下...

    乐智6152021-11-01