艾巴生活网

您现在的位置是:主页>科技 >内容

科技

掌握多线程技术的好处(掌握多线程技术)

2024-12-04 13:50:08科技帅气的蚂蚁
序初学者在学习编程的时候,很容易因为多线程产生的各种问题而害怕使用多线程。然而,多线程技术是一种可以在发展中不可忽视。基本上在我们

掌握多线程技术的好处(掌握多线程技术)

初学者在学习编程的时候,很容易因为多线程产生的各种问题而害怕使用多线程。然而,多线程技术是一种可以在发展中不可忽视。基本上在我们的实际应用中,每个项目都会用到多线程,所以多线程技术一定要掌握。

为什么要使用多线程?

随着工业的进步,笔记本和台式机大部分都是双核、4核、8核甚至16核,也很常见。如果是单线程程序,那么50%浪费在双核CPU上,75%浪费在4核CPU上。

所谓的多线程单核CPU上是假多线程。同时,处理器只能处理一块逻辑,但是线程切换更快,看起来像是多个线程同时运行。

多核CPU上的多线程才是真正的多线程。可以让你的多段逻辑同时工作,多线程,真正发挥多核CPU的优势,达到充分利用CPU的目的。

如果你不不要在你的项目中使用多线程,它这不仅是一个技术问题,也是对电脑资源的极大浪费,就像你买了一辆配置非常高的越野车,却只用来日常代步一样。三

为什么不敢用多线程?

之前和一些同学交流的时候,发现很多同学因为之前有问题而不敢用多线程,觉得一朝被蛇咬,十年怕井绳。

多线程容易出问题的一个主要原因是多线程充满了未知数。有些人在使用的时候,发现代码并没有按照预期的过程运行,这其实很正常。

我们必须弄清楚多线程确实是无法控制。从某种意义上说,多线程是由CPU调度执行的,而不是人为控制的。

我们所说的控制多线程是指。NET framework只向开发者开放一些接口,可以间接控制多线程的开始、停止、暂停和继续。

线程的开始和停止

从.开始。Net Framework 4.5,Task提供了一个名为CancellationTokenSource的对象,可以用来控制多线程的启动和停止。

首先,让让我们做一个线程任务。这个任务很简单,只要一直操作一个变量,每0.1秒加1,达到某个值后,重置为0,然后在界面上显示这个值。界面如下:

所以任务方法如下:

对象是CancellationTokenSource的对象,所以我们需要创建一个CancellationTokenSource对象cts:

然后在启动线程按钮的情况下,编写如下代码:

在出现停止线程按钮时,只需要调用cts的Cancel方法:

其实说白了就是通过cts控制cts的IsCancellationRequested属性,进而实现多线程的控制。

线程的暂停继续

多线程的挂起继续。NET为我们提供了另一个对象,——ManualReSetEvent。这个对象将有一个布尔类型的值,就像门一样。True是打开闸门,False是关闭闸门,所以要暂停多线程就调用这个对象的reset方法,要继续多线程就调用这个对象的set方法。使用起来非常简单。

首先,让让我们创建这个对象。我们可以通过构造方法给这个对象赋一个初始值。我这里指的是True,这样它就可以直接运行,不会阻塞。

但是,如果希望这个对象与多线程相关,就必须在多线程方法中体现这个对象的功能。这是调用这个对象的WaitOne方法,意思是在调用处被阻塞,通过判断真假来决定是否继续执行。就像大家开车经过高速收费站一样,即使现在广泛使用ETC,也需要在入口处减速。有一个ETC识别的过程,识别成功后才会抬杆。杆子不会自动抬起。这是

所以线程执行代码如下:

相比之下,它实际上增加了一个手册。WaitOne()。

线程暂停代码:

线程延续代码:

自动重置事件

AutoResetEvent和ManualResetEvent的用法非常相似。区别在于一个是手动的,一个是自动的。AutoResetEvent设置后将自动重置。这体现在多线程上,就是只会执行一次,就像大家进入社区一样。如果有10辆车排队等候,在自动模式下,一次只能有一辆车进入。如果是手动模式,保安可以控制车门和闸机打开,等待10辆车全部开出。