`
deepfuture
  • 浏览: 4421037 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80204
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70603
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103762
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286965
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15084
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67996
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32378
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46134
社区版块
存档分类
最新评论

VB.NET并行与分布式编程(5)-线程状态与调整[1]

 
阅读更多

一、线程状态涉及的CLR类

1)Process 类

提供对本地和远程进程的访问并使您能够启动和停止本地系统进程

 

GetCurrentProcess  获取新的 Process 组件并将其与当前活动的进程关联。

 

2)ProcessThread 类

使用 ProcessThread 来获取系统上当前运行的线程的信息。 例如,这样做将使您能够监视线程的性能特性。

线程是沿程序执行的路径。 它是 Win32 安排的最小执行单位。 它由堆栈、CPU 注册的状态和系统计划程序的执行列表中的项组成。

进程包括一个或多个线程和代码、数据和内存中的其他程序资源。 典型的程序资源是打开的文件、信号灯和动态分配的内存。 进程的所有线程共享该进程的每一资源。

当系统计划程序给程序的线程之一执行控制权时,程序便执行。 计划程序确定哪些线程运行以及何时运行。 在较高优先级的线程完成任务的时候,较低优先级的线程可能会被迫等待。 在多处理器计算机上,计划程序可将单个线程移到不同的处理器上,从而对 CPU 负荷进行平衡。

每个进程启动时都具有一个线程,该线程称为主线程。 任何线程都可以创建附加线程。 进程中的所有线程共享该进程的地址空间。

常用方法如下:

  BasePriority  获取线程的基本优先级。 
  CanRaiseEvents  获取一个指示组件是否可以引发事件的值。 (继承自 Component。)
  Container  获取 IContainer,它包含 Component。 (继承自 Component。)
  CurrentPriority  获取线程的当前优先级。 
  DesignMode  获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自 Component。)
  Events  获取附加到此 Component 的事件处理程序的列表。 (继承自 Component。)
  Id  获取线程的唯一标识符。 
  IdealProcessor  设置让此线程在其上运行的首选处理器。 
  PriorityBoostEnabled  获取或设置一个值,该值指示每当关联线程的进程主窗口接收焦点时,操作系统是否暂时提升该线程的优先级。 
  PriorityLevel  获取或设置线程的优先级别。 
  PrivilegedProcessorTime  获取线程在操作系统内核中运行代码所用的时间。 
  ProcessorAffinity  设置关联线程可以在其上运行的处理器。 
  Site  获取或设置 Component 的 ISite。 (继承自 Component。)
  StartAddress  获取操作系统调用的、启动此线程的函数的内存地址。 
  StartTime  获取操作系统启动该线程的时间。 
  ThreadState  获取此线程的当前状态。 
  TotalProcessorTime  获取此线程使用处理器的时间总量。 
  UserProcessorTime  获取关联的线程在应用程序内运行代码所用的时间。 
  WaitReason  获取线程等待的原因。

 

属性为:

 BasePriority  获取线程的基本优先级。 
  CanRaiseEvents  获取一个指示组件是否可以引发事件的值。 (继承自 Component。)
  Container  获取 IContainer,它包含 Component。 (继承自 Component。)
  CurrentPriority  获取线程的当前优先级。 
  DesignMode  获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自 Component。)
  Events  获取附加到此 Component 的事件处理程序的列表。 (继承自 Component。)
  Id  获取线程的唯一标识符。 
  IdealProcessor  设置让此线程在其上运行的首选处理器。 
  PriorityBoostEnabled  获取或设置一个值,该值指示每当关联线程的进程主窗口接收焦点时,操作系统是否暂时提升该线程的优先级。 
  PriorityLevel  获取或设置线程的优先级别。 
  PrivilegedProcessorTime  获取线程在操作系统内核中运行代码所用的时间。 
  ProcessorAffinity  设置关联线程可以在其上运行的处理器。 
  Site  获取或设置 Component 的 ISite。 (继承自 Component。)
  StartAddress  获取操作系统调用的、启动此线程的函数的内存地址。 
  StartTime  获取操作系统启动该线程的时间。 
  ThreadState  获取此线程的当前状态。 
  TotalProcessorTime  获取此线程使用处理器的时间总量。 
  UserProcessorTime  获取关联的线程在应用程序内运行代码所用的时间。 
  WaitReason  获取线程等待的原因。 

 

3)代码

Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState








Module Module1

    Sub Main()

        Dim mythread1 As Thread
        Dim mythread2 As Thread
        Dim mythread3 As Thread





        '创建线程对象
        mythread1 = New Thread(AddressOf mythreadrun)
        mythread2 = New Thread(AddressOf mythreadrun)
        mythread3 = New Thread(AddressOf mythreadrun)
        Console.WriteLine(Now.ToLongTimeString & "线程对象创建完毕,开始执行线程")

        '执行线程
        mythread1.Start("线程1")
        mythread2.Start("线程2")
        mythread3.Start("线程3")




        '等待线程完成
        mythread1.Join()
        mythread2.Join()
        mythread3.Join()


        '线程执行完毕
        Console.WriteLine(Now.ToLongTimeString & "线程执行完毕!")
    End Sub
    Public Sub mythreadrun(ByVal data As Object)
        Dim mynum As Integer




        'GetCurrentProcess  获取新的 Process 组件并将其与当前活动的进程关联。 



        '分配一个新的槽,这个槽存放线程本地数据,槽名称为
        'myjg,名称必须唯一
        Dim jg As LocalDataStoreSlot
        jg = Thread.GetNamedDataSlot("myjg")
        Thread.SetData(jg, 30)
        Try
            For mynum = 1 To 10
                Thread.SetData(jg, Thread.GetData(jg) - mynum)
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId & "==>" & Now.ToLongTimeString & "=>" & (Thread.GetData(jg) + mynum) & "-" & mynum & ",计算结果为:" & Thread.GetData(jg))
                '获取线程状态
                Thread.Sleep(5)
                Dim value As ProcessThreadCollection
                Dim pt As ProcessThread
                value = Process.GetCurrentProcess().Threads
                For Each pt In value
                    If pt.ThreadState = Wait Then
                        Console.WriteLine(pt.Id & "等待原因:" & pt.WaitReason.ToString)
                    End If
                Next
            Next
        Catch
            Console.WriteLine(data & "  " & Now.ToLongTimeString & "线程异常终止!")
            '终止线程
            Thread.CurrentThread.Abort()
        Finally
            Thread.FreeNamedDataSlot("myjg")
        End Try

    End Sub
End Module

 

4、运行效果

 



 

 对于等待原因来说,有以下几种:

我们需要使用ThreadWaitReason 枚举:

ThreadWaitReason 枚举

 

Executive  线程正在等待计划程序。 
 FreePage  线程正在等待可用的虚拟内存页。 
 PageIn  线程正在等待虚拟内存页到达内存。 
 SystemAllocation  线程正在等待系统分配。 
 ExecutionDelay  线程执行延迟。 
 Suspended  线程执行暂停。 
 UserRequest  线程正在等待用户请求。 
 EventPairHigh  线程正在等待事件对高。 
 EventPairLow  线程正在等待事件对低。 
 LpcReceive  线程正在等待本地过程调用到达。 
 LpcReply  线程正在等待对本地过程调用的回复到达。 
 VirtualMemory  线程正在等待系统分配虚拟内存。 
 PageOut  线程正在等待虚拟内存页写入磁盘。 
 Unknown  线程正在因未知原因而等待。 

 

  • 大小: 48.4 KB
1
1
分享到:
评论

相关推荐

    vb.net.zip_VB.NET 控件_vb.net_vb.net excel_vb.net 控件_vb.net控件

    VB.NET 支持线程操作,这个文件可能包含使用VB.NET创建和管理线程的实例,比如并行处理任务,或者实现后台任务。 7. **WebService_mehta.zip**:Web服务是一种通过HTTP协议提供和消费的接口,允许不同系统间的通信...

    深入.net平台和c#编程PPT-07

    1. **.NET框架概述**:.NET框架是微软开发的一种应用程序框架,它提供了丰富的类库和运行环境,支持多种编程语言,如C#、VB.NET等。这个部分可能会介绍.NET框架的结构,包括CLR(Common Language Runtime)和FCL...

    VB.NET高级编程

    5. 并发编程:VB.NET支持多线程编程,可以使用Thread类创建和管理线程。Task类和Parallel类提供了异步编程和并行处理的能力,利用多核处理器提升程序性能。VB.NET还引入了async/await关键字,简化了异步编程的复杂度...

    VB.NET应用集锦例程源代码

    《VB.NET应用集锦例程源代码》是一个包含多个VB.NET工程实例的资源包,旨在帮助学习者深入了解和掌握VB.NET编程技术。这个资源包包括了五个不同的项目源代码,覆盖了VB.NET的基础到进阶应用,对于计算机专业的学生...

    vb.net中高级篇.rar_.net_vb net_vb_net_vb.net_vb.net_

    VB.NET是Microsoft开发的一种编程语言,它是Visual Basic的.NET版本,设计用于构建Windows应用程序、Web应用程序和分布式系统。本资源“vb.net中高级篇.rar”显然聚焦于VB.NET的进阶概念和技术,对于想要深入理解和...

    VB.net 可视电话程序

    5. **并发与同步**:使用异步编程模型(如async/await关键字)处理并发请求,保证多个通信任务的并行处理。 6. **状态管理**:实现用户状态的管理,如在线、离线、忙碌等,便于判断能否进行通话。 **三、应用拓展...

    浅谈.NET下的多线程和并行计算.pdf

    ### .NET下的多线程与并行计算:深入解析与应用 #### 一、引言 随着计算机硬件的发展,特别是多核处理器的普及,多线程和并行计算已成为现代软件开发不可或缺的一部分。本文旨在探讨.NET框架下多线程与并行计算的...

    Visual.Basic.2010&.NET.4高级编程(第6版)

    5. **并发和多线程**:讲解TPL和并发编程概念,帮助开发者利用多核处理器优势,编写高效的应用。 6. **ASP.NET和Windows Forms**:讨论如何使用VB2010开发Web应用程序和桌面应用程序,包括UI设计、数据绑定和状态...

    Apress - Pro VB 2008 and the .NET 3.5 Platform, 3rd Edition (Mar 2008)

    9. **并发与多线程**:VB 2008提供了对多核处理器和并发编程的支持,包括线程同步、异步编程和并行 LINQ。 10. **调试与性能优化**:介绍Visual Studio 2008中的调试工具,以及如何分析和优化代码性能。 这本书还...

    经典的.NET 面试题

    - VB.NET:另一种.NET语言,语法与Visual Basic类似,但完全基于.NET框架。 - F#:函数式编程语言,也可在.NET框架上运行。 3. **ASP.NET** - ASP.NET是.NET框架的一部分,用于构建Web应用程序。主要版本有ASP...

    .Net framwwork 4.0

    VB.NET则引入了多线程并行计算的支持,利用了多核处理器的优势,提高了程序执行速度。 其次,.NET Framework 4.0中的Common Language Runtime (CLR)进行了优化,提高了内存管理效率,降低了垃圾回收的开销。同时,...

    .NET面试大全【经典,值得珍藏】

    2. VB.NET:另一种流行的.NET语言,语法与VB6类似,但支持.NET框架的所有功能。 3. F#:函数式编程语言,也可用于.NET开发,适合处理数据科学和并行计算任务。 三、ASP.NET 1. ASP.NET Web Forms:基于控件的模型,...

    VS.net九大案例代码

    7. **并发与多线程**:VS.NET提供了对多核处理器和异步编程的良好支持。案例可能包括如何创建并管理线程,使用任务并行库(TPL)进行并发编程,以及处理锁和同步问题。 8. **Azure云服务**:VS.NET可以用于开发Azure...

    精通.Net核心技术原理与构架+精通.NET核心技术高级特性

    4. **多线程(Multithreading)**: 学习如何在.NET中创建和管理线程,实现并行计算。 5. **WCF(Windows Communication Foundation)**: 微软的服务导向架构框架,用于构建分布式系统。 6. **.NET框架安全性(.NET...

    .net4.0安装文件

    8. **并行编程和Task Parallel Library (TPL)**:.NET 4.0引入了对多核处理器更充分的利用,通过TPL提供了并行编程的支持,使开发者能编写高性能的多线程应用程序。 9. **内存诊断工具**:.NET 4.0提供了诊断工具,...

    VisualC++.NET教程

    6. **并发和多线程**:Visual C++.NET支持多线程编程,利用.NET Framework的ThreadPool和Task Parallel Library(TPL)可以方便地编写高效的并行代码,充分利用多核处理器的优势。 7. **单元测试和调试**:IDE内置...

    Advanced .NET Programming

    - **多线程与并行计算**:学习如何在.NET中有效地管理和调度线程,以充分利用多核处理器的计算能力。 - **代码分析和性能调优工具**:使用Visual Studio和其他工具来识别和解决性能瓶颈,提高代码执行效率。 ### 4....

    .net面试题

    它包含一组全面的开发工具和库,支持多种编程语言,如C#、VB.NET、F#等。面试中,针对.NET的技术考察通常涵盖以下几个关键领域: 1. **基础概念**:了解.NET框架的基本构成,如CLR(Common Language Runtime)——...

    Microsoft .NET Framework 4(独立安装程序)

    2. **C# 4.0 和 VB.NET 10.0**:这两个编程语言随着.NET Framework 4一同发布,引入了新的特性,如动态类型、命名参数、可空引用类型和多目标框架支持。 3. **WCF(Windows Communication Foundation)**:这个组件...

    en_microsoft_.net_framework_4_for_server_core_x64_sc_640395.exe.zip

    2. **C#,VB.NET,F#等编程语言**:.NET Framework支持多种编程语言,开发者可以根据需求选择合适的语言进行开发。 3. **类库**:.NET Framework提供了丰富的类库,如System命名空间,包含大量预定义的类,方便...

Global site tag (gtag.js) - Google Analytics