vb.net中线程的介绍

为了理解VB.NET中的线程,有助于理解一些基础概念。首先,线程是由于操作系统支持而发生的事情。Microsoft Windows是一种先发制人的多任务操作系统。Windows中称为任务调度器的一部分将处理器时间分配给所有正在运行的程序。这些处理器时间的小块称为时间片。程序不负责它们得到多少处理器时间,任务调度器负责。因为这些时间片非常小,你会产生一种错觉,认为计算机正在同时做几件事。...

为了理解VB.NET中的线程,有助于理解一些基础概念。首先,线程是由于操作系统支持而发生的事情。Microsoft Windows是一种先发制人的多任务操作系统。Windows中称为任务调度器的一部分将处理器时间分配给所有正在运行的程序。这些处理器时间的小块称为时间片。程序不负责它们得到多少处理器时间,任务调度器负责。因为这些时间片非常小,你会产生一种错觉,认为计算机正在同时做几件事。

Hand and Cat's Cradle

螺纹的定义

线程是单个顺序控制流。

一些限定词:

  • 线程是通过该代码体的“执行路径”。
  • 线程共享内存,因此它们必须协作以产生正确的结果。
  • 线程具有特定于线程的数据,如寄存器、堆栈指针和程序计数器。
  • 一个进程是一个可以有多个线程的代码体,但它至少有一个线程,并且只有一个上下文(地址空间)。

这是程序集级别的东西,但当您开始考虑线程时,您就会了解到这一点。

多线程与多处理

多线程与多核并行处理不同,但多线程和多处理确实可以协同工作。如今,大多数个人电脑的处理器至少有两个内核,而普通家用电脑有时最多有八个内核。每个内核都是一个独立的处理器,能够独立运行程序。当操作系统将不同的进程分配给不同的内核时,您可以获得性能提升。使用多线程和多处理器获得更高的性能称为线程级并行。

可以做的很多事情取决于操作系统和处理器硬件可以做什么,而不是你在程序中可以做什么,你不应该期望在任何事情上都能使用多个线程。事实上,您可能不会发现许多从多线程中受益的问题。所以,不要仅仅因为多线程就实现它。如果程序不适合多线程处理,则可以轻松降低程序的性能。例如,视频编解码器可能是多线程最差的程序,因为数据本身就是串行的。处理网页的服务器程序可能是最好的,因为不同的客户机天生是独立的。

实践线程安全

多线程代码通常需要复杂的线程协调。微妙且难以发现的bug很常见,因为不同的线程通常必须共享相同的数据,这样当另一个线程不希望数据时,一个线程可以更改数据。这个问题的一般术语是“竞态条件”。换句话说,两个线程可以进入一个“竞态”来更新相同的数据,结果可能不同,这取决于哪个线程“获胜”。举个简单的例子,假设您正在编写一个循环:

如果循环计数器“I”意外地错过了数字7,并从6变为8,但只有在某些时候,它会对循环正在进行的任何操作产生灾难性的影响。防止这样的问题称为线程安全。如果程序在以后的操作中需要一个操作的结果,那么就不可能编写并行进程或线程来完成。

基本多线程操作

是时候把这个预防性的谈话推到后台,编写一些多线程代码了。为了简单起见,本文现在使用一个控制台应用程序。如果您想继续,请使用新的控制台应用程序项目启动VisualStudio。

多线程使用的主要命名空间是System.Threading命名空间和Thread类将创建、启动和停止新线程。在下面的示例中,请注意TestMultiThreading是一个委托。也就是说,您必须使用线程方法可以调用的方法的名称。

在这个应用程序中,我们可以通过简单地调用它来执行第二个Sub:

这将以串行方式执行整个应用程序。然而,上面的第一个代码示例启动TestMultiThreading子例程,然后继续。

一个递归算法实例

这是一个多线程应用程序,涉及使用递归算法计算数组的排列。并非所有代码都显示在这里。被置换的字符数组只是“1”、“2”、“3”、“4”和“5”。

请注意,有两种方法可以调用Permute子函数(在上面的代码中都被注释掉)。一个启动线程,另一个直接调用它。如果你直接打电话,你会得到:

但是,如果您启动一个线程并启动置换子线程,则会得到:

这清楚地表明,至少生成了一个置换,然后主子节点向前移动并完成,显示“Finished Main”,同时生成其余置换。由于显示来自由Permute子调用的第二个子线程,因此您知道这也是新线程的一部分。这说明了线程是前面提到的“执行路径”的概念。

竞赛条件示例

本文的第一部分提到了竞争条件。下面是一个直接显示它的示例:

即时窗口在一次试验中显示了这一结果。其他试验则不同。这是比赛条件的本质。

  • 发表于 2021-10-09 07:37
  • 阅读 ( 210 )
  • 分类:编程

你可能感兴趣的文章

功能(function)和vb程序(procedure in vb)的区别

...的过程,而过程是程序中的可执行语句块。 visualbasic(VB.NET)是在微软开发的.NET框架上实现的一种编程语言。它是一种现代的通用编程语言。它有助于开发高效的程序,而且更容易学习语言。此外,VB还提供了各种功能,如标准...

  • 发布于 2021-07-01 18:59
  • 阅读 ( 272 )

asp公司(asp)和asp.net(asp.net)的区别

...典。它是由Microsoft开发和发布的服务器端脚本环境。ASP.NET是一个服务器端Web应用程序框架。ASPX代表扩展的活动服务器页。它是为Web开发设计的,用于生成***页。 ASP代表活动服务器页。它通常被称为经典ASP或ASP经典。它是由Micro...

  • 发布于 2021-07-13 06:18
  • 阅读 ( 160 )

vb语言(vb)和运动模拟(vb.net)的区别

...正的面向对象继承(甚至跨语言对象继承)、重载、自由线程、严格的类型检查和新的共享开发环境。vb.net中有许多更改。在vb6中,使用Get和Let编写属性过程,而在VB.NET中,使用Get和Set。与VB不同,VB.NET不使用Gosub和DefType等关键...

  • 发布于 2021-07-13 21:15
  • 阅读 ( 249 )

vb.net中的强制转换和数据类型转换

...组成的第一篇文章,VB.NET中的强制转换和数据类型转换,介绍了强制转换。本文介绍了可用于在VB.NET中强制转换的三个操作符—DirectCast、CType和TryCast—并比较了它们的性能。 何时使用不同的铸造操作 微软和其他文章称,性...

  • 发布于 2021-09-07 01:21
  • 阅读 ( 224 )

visual basic术语表

...为它是Win32环境的基石之一。 注:Dan Appleman在其关于VB.NET的书中提到ActiveX,“(一些)产品来自营销部门。 ... ActiveX是什么?它是OLE2——有了一个新名字。” 注2:尽管VB.NET与ActiveX组件兼容,但它们必须包含在“包装器”...

  • 发布于 2021-09-10 22:25
  • 阅读 ( 234 )

什么是vb.net资源及其使用方法(vb.net resources and how)

...优势:更好的全球化。资源通常包含在主程序集中,但.NET还允许您将资源打包到附属程序集中。通过这种方式,您可以实现更好的全球化,因为您只包含所需的附属程序集。微软给了每种语言一个代码。例如,英语的美国方言...

  • 发布于 2021-09-11 23:50
  • 阅读 ( 179 )

处理对象

在《编写对象的新实例》一文中,我介绍了创建对象的新实例的各种方法。相反的问题是处理对象,在VB.NET中您不必经常担心。NET包含一种称为垃圾收集器(GC)的技术,该技术通常安静而高效地处理幕后的一切。但有时,通常...

  • 发布于 2021-09-11 23:51
  • 阅读 ( 217 )

vb.net控件继承编程简介

...进之一是添加了两个属性。这是老班根本没有做的事。 介绍了这两个新性质 FillColor 和 FillImage 要了解VB.NET中的工作原理,请尝试这个简单的实验。将类添加到标准项目,然后输入代码: Public Property Whatever Get ...

  • 发布于 2021-09-11 23:52
  • 阅读 ( 180 )

如何在visual basic 6中创建和使用资源(create and use resources in visual basic 6)

...小的打包和部署应用程序的麻烦。 资源文件在VB 6和VB.NET中都可用,但它们的使用方式与其他系统一样,在这两个系统中有很大的不同。请记住,这不是在VB项目中使用文件的唯一方法,但它有真正的优势。例如,可以在PictureB...

  • 发布于 2021-09-11 23:54
  • 阅读 ( 222 )

vb.net解决方案和项目文件“sln”和“vbproj”

...。例如,如果您的计算机在64位模式下运行,则无法在VB.NET Express中以32位CPU为目标,例如,与32位Access Jet数据库引擎兼容。(Visual Studio在其他版本中提供了一种方法),但您可以添加以下内容: 添加到.vbproj文件中的元素以完...

  • 发布于 2021-09-11 23:55
  • 阅读 ( 220 )
uoP099B8
uoP099B8

0 篇文章

相关推荐