使用 Parallel 类进行多线程编码(下)
2.Parallel.ForEach() 的使用
从 ForEach() 这个名字可以看出该方法是用来遍历泛型集合的,新建一个 ASP.NET Core Web应用的项目,如下:
在 Index.cshtml.cs 文件中增加一个 UserInfo.cs 的类,代码如下:
public class UserInfo{ public int UserId { get; set; }public string UserName { get; set; }}
在 Index.cshtml.cs 文件的 IndexModel 类中添加测试方法 ParallelForEachDemo(),代码如下:
public void OnGet(){ParallelForEachDemo();} public string DemoStr; //定义页面取值的变量public void ParallelForEachDemo(){//构造泛型集合数据List<UserInfo> userList = new List<UserInfo>{new UserInfo{ UserId=1,UserName="张三" },new UserInfo{ UserId=2,UserName="李四" },new UserInfo{ UserId=3,UserName="王五" },new UserInfo{ UserId=4,UserName="赵六" },new UserInfo{ UserId=5,UserName="大师兄" }};//foreach 循环时间统计string allName1 = string.Empty;Stopwatch sw1 = new Stopwatch();sw1.Start(); //计时开始foreach (UserInfo user in userList){allName1 += user.UserName + ",";Thread.Sleep(10);//模拟一个耗时操作,以免看不到效果}sw1.Stop(); //计时结束//Parallel.ForEach 循环时间统计string allName2 = string.Empty; Stopwatch sw2 = new Stopwatch();sw2.Start(); //计时开始Parallel.ForEach(userList, user => //多线程遍历{allName2 += user.UserName + ",";Thread.Sleep(10);//模拟一个耗时操作,以免看不到效果});sw2.Stop(); //计时结束//记录花费时间DemoStr = string.Format("foreach 循环花费时间为:{0},Parallel.ForEach 循环花费时间为:{1}", sw1.ElapsedMilliseconds, sw2.ElapsedMilliseconds);}
在 Index.cshtml.cs 中输出 DemoStr 变量的值,代码如下:
<div class="text-center"><h1 class="display-4">Welcome</h1><br /><p> @Model.DemoStr </p>
</div>
编译后运行,结果如下:
显然使用多线程更快,单线程和多线程的时间差距大概是5倍左右(不同CPU时间不同,这里仅代表本次执行结果)。
3.Parallel.Invoke() 的使用
在 Index.cshtml.cs 文件的 IndexModel 类中新增方法,分别访问 bing.com,360.cn,baidu.com 这3个网站, 然后统计响应的字符数,代码如下:
/// <summary>/// Thread.CurrentThread.ManagedThreadId 用于显示当前的线程ID/// </summary>/// <param name="from"></param>/// <param name="url"></param>public void CountString(string from, string url){long cnt = 0;HttpWebRequest request = WebRequest.CreateHttp(url); //根据给定的网址创建一个请求HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //得到响应对象cnt = response.ContentLength; //获取响应内容长度//用table标签格式化输出便于查看ContentStr += "<tr><td>" + from + "</td><td>" + Thread.CurrentThread.ManagedThreadId + "</td>" +"<td>" + url + "</td><td>" + cnt + "</td></tr>";return;}
单线程顺序执行3次函数:
/// <summary>/// 单线程执行3次函数取三个不同网址的内容/// </summary>/// <returns></returns>public string SingleTotal(){Stopwatch sw1 = new Stopwatch();sw1.Start();CountString("single", "http://www.bing.com");CountString("single", "http://www.360.cn");CountString("single", "http://www.baidu.com");sw1.Stop();return sw1.ElapsedMilliseconds.ToString();}
多线程并发执行3次函数:
public string MultiTotal(){Stopwatch sw2 = new Stopwatch();sw2.Start(); // 使用Lambda表达式构造 Action,这里可以传多个方法来并行执行,不限于3个Parallel.Invoke( ()=>CountString("Multi", "http://www.bing.com"), ()=>CountString("Multi", "http://www.360.cn"), ()=>CountString("Multi", "http://www.baidu.com"));sw2.Stop();return sw2.ElapsedMilliseconds.ToString();}
在 OnGet() 函数中分别调用单线程方法和多线程方法:
public string DemoStr; //定义页面取值的变量来显示执行时间public string ContentStr; //定义页面取值变量来显示函数执行情况public void OnGet(){string time1 = SingleTotal(); //单线程花费时间string time2 = MultiTotal(); //多线程花费时间DemoStr = string.Format("单线程花费时间为:{0},多线程花费时间为:{1}", time1, time2);//用表格来展示数据更清晰ContentStr = "<table border='1' width='600' style='margin:0 auto;'>" +"<tr><td>类型</td><td>线程ID</td><td>网址</td><td>响应内容长度</td></tr>" + ContentStr + "</table>"; }
在 Index.cshtml 中修改代码如下:
<div class="text-center"><h1 class="display-4">Welcome</h1><br /><p> @Model.DemoStr </p><br /><p> @Html.Raw(Model.ContentStr) </p>
</div>
编译后运行结果如下:
显然,使用多线程时花费的时间更少。
从表格的执行明细中也可以看到:使用多线程的时候3个方法分别是3个不同线程来执行的。
相关文章:

使用 Parallel 类进行多线程编码(下)
2.Parallel.ForEach() 的使用 从 ForEach() 这个名字可以看出该方法是用来遍历泛型集合的,新建一个 ASP.NET Core Web应用的项目,如下: 在 Index.cshtml.cs 文件中增加一个 UserInfo.cs 的类,代码如下: public class U…...

基于微信小程序+Java+SSM+Vue+MySQL的药店管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSSMVueMySQL的药店管理系统【附源码文档…...

C#使用MQTT(一):MQTT服务端
MQTT(Message Queuing Telemetry Transport) 即时通讯协议, 开发商 IBM MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状…...

AD原理图update为pcb
首先,要在自己的项目下面创建好原理图和PCB,记得保存!!! 点击设计>update 更新成功!...

应用海外仓系统后,可以改善哪些海外仓的核心业务流程?
随着跨境电商的快速发展,海外仓作为物流的重要环节,其运营效率直接影响到企业的市场竞争力。应用海外仓系统(WMS)可以有效改善海外仓的核心业务流程,以下将详细介绍四大核心流程的优化措施。 一、货物接收入库流程的改…...

SQL进阶技巧:截止当前批次前的批次量与订单量 | 移动窗口问题
目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 表A有如下字段,user id(用户ID),batch id(批次ID),order id(订单ID),create time(创建时间),同一个用户ID下有多个批次,同一个批次下有多个订单ID,相同批次ID的创建时间是相同的,创建时间精确到了秒。 统计,截…...

C#中的Graphics类和SetQuality()自定义方法
在 C# 中,Graphics 类是 System.Drawing 命名空间的一部分,它提供了一组方法和属性,用于在 Windows Forms 应用程序中进行二维绘图。Graphics 对象可以绘制文本、线条、曲线、形状和图像,并可以对它们进行变换和剪辑。 Graphics …...

圣诞节:白酒与西式料理的异国风情
随着冬日的脚步渐近,圣诞的钟声即将敲响。在这个充满异国情调和温馨氛围的节日里,一场中西合璧的美食盛宴悄然上演。豪迈白酒(HOMANLISM)与西式料理的碰撞,不仅为圣诞餐桌增添了几分不同的韵味,更让人们在这…...

2.ChatGPT的发展历程:从GPT-1到GPT-4(2/10)
引言 在人工智能领域,自然语言处理(NLP)是连接人类与机器的重要桥梁。随着技术的不断进步,我们见证了从简单的文本分析到复杂的语言理解的转变。ChatGPT,作为自然语言处理领域的一个里程碑,其发展历程不仅…...
yjs01——机器学习的过程
ps:换了阿婆主重新看机器学习 机器学习的过程: 1.获取数据——2.数据基本处理——>3.特征工程——>4.机器学习(模型训练)—>模型评估 获取数据: 1.专有名词: 1.样本:一行数据是一个样本…...
Git工作流程
git 工作流程 克隆或同步远程仓库 使用git clone命令将本仓库完全镜像一份至本地 使用git pull命令将远程仓库代码同步到本地新建或修改代码文件后,将代码提交到暂存区;(git add filename)将暂存区域的文件提交到本地git仓库。(git commit filename -m …...

Qt-QWidget的font属性(18)
目录 描述 相关API 使用 使用Qt Designer设置字体 使用纯代码设置字体 描述 这个是用来设置字体样式的 相关API 使用 我们创建一个新的项目 使用Qt Designer设置字体 使用纯代码设置字体 相比于上面使用Qt Designer,用代码来实现就要灵活的多,主…...

Go语言概述
1.Go语言的特点 1)从语言层面支持并发,实现简单 2)goroutine,轻量级线程,可实现大并发处理,高效利用多核 3)垃圾回收机制,内存自动回收,不需要开发人员管理 4࿰…...
P6627 [省选联考 2020 B 卷] 幸运数字
*原题链接* 并不是非常难的题,不过细节非常多。 首先大题思路很明确,把所有条件储存下来,把这些l,r,x啥的离散化,然后区间异或,最后查询最大值。至于区间异或用差分就好了,因为异或…...

活动|华院计算宣晓华受邀出席“AI引领新工业革命”大会,探讨全球科技的最新趋势
8月31日,“AI引领新工业革命”大会于上海图书馆圆满落幕。本次大会由TAA校联会和台协科创工委会联合主办,得到上海市台办、上海市台联、康师傅的大力支持。大会邀请了NVIDIA全球副总裁、亚太区企业营销负责人刘念宁,元禾厚望资本创始合伙人潘…...

k8s配置
一、前期准备 1、修改主机的/etc/hosts文件挟持域名 [rootk8s-master ~]# vim /etc/hosts 192.168.8.199 k8s-master 192.168.8.200 k8s-node1 192.168.8.201 k8s-node2 2、配置yum源 [rootk8s-master ~]# cd /etc/yum.repos.d/ [rootk8s-master yum.repos.d]# vim kubernetes…...

力扣第79题 单词搜索
前言 记录一下刷题历程 力扣第79题 单词搜索 单词搜索 原题目:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻…...
【系统架构设计师】抽象工厂设计模式
抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在抽象工厂模式中,客户端不依赖于产品类实例的如何被创建、组合和表达的细节,这对于产品族(即一组相互关联或相互依赖的产品)的创建尤其…...

海外云手机有哪些推荐?
随着云手机的发展,越来越多的企业和个人开始使用云手机来满足他们的海外业务需求。用户可以通过云手机实现方便、快捷的海外访问,一般用来进行tiktok运营、亚马逊电商运营、海外社媒运营等操作。海外云手机平台有很多,以下是一些比较好的云手…...
旋转目标检测对照实验-mmrotate基础教程
环境安装和测试可以参考mmrotate旋转目标检测实战指南_validate mmrotate-CSDN博客 使用自定义数据集训练 如果需要使用自己的数据集进行训练,首先需要把自己数据的标签格式转换为dota数据集的格式,形如(前八个数为坐标值,第九个…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...