c#输出一个平行四边形_C#中多线程的那点事儿-Thread入门

本文介绍了C#中的多线程基础知识,从Thread的使用开始,探讨了多线程的发展历程,包括Thread、ThreadPool到Task的演进。通过实例展示了如何启动并行任务,强调了正确使用多线程可以提升效率,但也可能带来性能下降的风险。后续文章将深入讨论多线程的相关问题,如线程资源竞争、死锁、Task和并发处理等。
摘要由CSDN通过智能技术生成
767990405ebde6986993ef1f202e349a.png

Thread

多线程,大部分编程言语都支持的一种特性。当然在C#中也不例外。而且在C#中的线程,是比较好用,比较方便的。


今天我将从最基础的Thread开始说起,来掰扯掰扯C#中多线程的那点事儿!

Thread基本用法

下面我们通过两个简单的函数,来模拟两个独立的任务:

static void Func1(){    for (int i = 0; i < 10; i++)    {        Console.WriteLine($"Func1 is Running {i} ......");        System.Threading.Thread.Sleep(500);    }}static void Func2(){    for (int i = 0; i < 10; i++)    {        Console.WriteLine($"Func2 is Running {i} ......");        System.Threading.Thread.Sleep(333);    }}

然后使用Thread,来同时启动两个任务:

 static void Main(string[] args) {     Console.WriteLine("Hello Thread World!");     var t1 = new System.Threading.Thread(Func1);     var t2 = new System.Threading.Thread(Func2);     t1.Start();     t2.Start();     t1.Join();     t2.Join(); }

最后简单看看运行结果:

c8566f8ee6c4751408181d6f84bcb023.png

两个任务同时输出

可以看到,两个任务,在同时运行,在控制台中,交替输出结果。

如果将测试用的两个函数,换为我们自己的业务代码,在一定程度上可以达到并行执行的效果。从而提升运行的效率。

利用多线程技术,可以在我们的算法效率无法进一步优化的时候,利用现在CPU的核心比较多的特性,进一部提升我们的算法的效率,提升的幅度可以达到数倍到十几倍不等。

当然实际的效率提升情况,和我们的实际情况相关,也和我们自身的水平有关。甚至有些不适合多线程的任务,还有可能因为使用多线程而效率变低!

C#中多线程发展历程

早在2003年5月的C# 1.1 版本中,微软就加入了对Thread的支持。同时微软也在C#中支持了ThreadPool的,使用ThreadPool,通过一些策略,可以改善多线程导致的性能问题。

此后的很长一段时间,Thread和ThreadPool统治着C#中的多线程编程。

直到2010年4月,微软推出了.Net Framework 4.0,同时也正式推出了Task这个全新的多线程编程模型。

Task的性能更佳,默认使用线程池实现,并针对多核CPU做了大量性能优化,同时简化了API的调用方式。结合 async 和 await 关键字,让我们可以像写串行程序一样,编写并行程序!

踩坑记录

实在是太基础了,没有踩到坑!

如果你觉得不过瘾,没关系,关注外老师,后面将写一个系列的文章,来掰扯C#中多线程那点事。

下期预告

线程开的越多,程序运行越快吗?(开启线程的代价)

ThreadPool

多个线程之间的资源共享问题

多线程死锁问题

Task

Parallel

await/async

Linq与PLinq (ParallelEnumerable)

。。。 。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值