.Net并行编程 - 并行任务基础知识
在微软的.NET Framework中,任务是通过System.Threading.Tasks命令空间中的Task类来实现的。它的静态属性Task.Factory是TaskFactory类的一个实例,它被用来创建和调度新任务。
调度是并行任务的一个重要方面。新任务并不一定会像线程那样直接开始运行,而是被放在一个工作队列里面。
有两个方法,DoLeft()
public static void DoLeft()
{
Thread.Sleep();
Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoLeft is running!"));
}
和DoRight()
public static void DoRight()
{
Thread.Sleep();
Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoRight is running!"));
}
我们来并行的执行这两个任务。
• Parallel.Invoke方式
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); Parallel.Invoke(DoLeft, DoRight); sw.Stop();
Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds)); Console.Read();
}
运行结果为:
运行结果表明Parallel.Invoke方法创建了新任务并等待它们完成。
• Task.Factory.StartNew方法
调用方法变更为:
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); var task1 = Task.Factory.StartNew(DoLeft); //StartNew, 创建并启动System.Threading.Tasks.Task
var task2 = Task.Factory.StartNew(DoRight); sw.Stop();
Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds)); Console.Read();
}
运行结果:
从结果可以得出,TaskFactory类的StartNew方法会创建并调度一个新任务,并不等待任务执行完成。添加Task.WaitAll来等待所有并行任务执行完成。
Task.WaitAll(task1, task2);
可以看出其是在等待tasks全部执行完成。
.Net并行编程 - 并行任务基础知识的更多相关文章
- C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)
异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- java第九节 网络编程的基础知识
/** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...
- 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器
计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...
- [源码解析] PyTorch 流水线并行实现 (1)--基础知识
[源码解析] PyTorch 流水线并行实现 (1)--基础知识 目录 [源码解析] PyTorch 流水线并行实现 (1)--基础知识 0x00 摘要 0x01 历史 1.1 GPipe 1.2 t ...
- 并行编程OpenMP基础及简单示例
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- [转] linux操作系统下c语言编程入门--基础知识
点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译 2. Makefile的编写 3. 程序库 ...
- 01网络编程(基础知识+OSI七层协议+TCP与UDP)
目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...
- WIN64内核编程-的基础知识
WIN64内核编程基础班(作者:胡文亮) https://www.dbgpro.com/x64driver 我们先从一份"简历"说起: 姓名:X86或80x86 性别:? 出生 ...
随机推荐
- 03 Oracle分区表
Oracle分区表 先说句题外话… 欢迎成都天府软件园的小伙伴来面基交流经验~ 一:什么是分区(Partition)? 分区是将一个表或索引物理地分解为多个更小.更可管理的部分. 分区对应用透 ...
- 学习笔记 - Manacher算法
Manacher算法 - 学习笔记 是从最近Codeforces的一场比赛了解到这个算法的~ 非常新奇,毕竟是第一次听说 \(O(n)\) 的回文串算法 我在 vjudge 上开了一个[练习],有兴趣 ...
- Oracle->oracle单实例Shell脚本[20180122]
脚本主要用于redhat平台安装11g和12c软件 依赖包检查与安装 用户.组检查与安装 系统内核.用户限制 防火墙.selinux关闭 注意,linux组脚本 ...
- IO流,Properties基本功能和遍历
import java.util.Enumeration; import java.util.Iterator; import java.util.Properties; import java.ut ...
- Python入门 —— 01简介
Python 历史 python 的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...
- Debian中CodeIgniter+nginx+MariaDB+phpMyAdmin配置
本文不讲述软件安装过程,记述本人在Debia中配置CodeIgniter时遇到的问题及解决方法,希望能够为有需要的人提供帮助. 一.Debian版本及所需的软件 Debian 9.8 stretch ...
- python学习笔记:第13天 内置函数(一)
详细文件查看点击这里:详细地址
- 简单R语言爬虫
R爬虫实验 R爬虫实验 PeRl 简单的R语言爬虫实验,因为比较懒,在处理javascript翻页上用了取巧的办法. 主要用到的网页相关的R包是: {rvest}. 其余的R包都是常用包. libra ...
- 自己用原生JS写的轮播图,支持移动端触屏滑动,面向对象思路。分页器圆点支持click和mouseover。
自己用原生javascript写的轮播图,面向对象思路,支持移动端手指触屏滑动.分页器圆点可以选择click点击或mouseover鼠标移入时触发.图片滚动用的setInterval,感觉setInt ...
- css dropdown menu
<ul> <li class="left">abc</li> <li class="middle" id=" ...