-
VB.NET并行与分布式编程
收藏VB.NET并行与分布式编程
最近更新文章
VB.NET并行与分布式编程(11)-重叠 I/O
NativeOverlapped 结构
提供一种显式布局,它在非托管代码中可见,并将具有与 Win32 OVERLAPPED 结构相同的布局且在结尾有附加保留的字段。
'声明<ComVisibleAttribute(True)> _Public Structure NativeOverlapped'用法Dim instance As NativeOverlapp
EventHan ...
VB.NET并行与分布式编程(10)-关于栅栏
一、临界域
Thread.BeginCriticalRegion 方法
通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常的影响可能会危害应用程序域中的其他任务。
Thread.EndCriticalRegion 方法
通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常仅影响当前任务。
进入临界夫域相当于设置了一个栅栏,在栅栏之后的所 ...
VB.NET并行与分布式编程(9)-异步编程设计模式
一、并行基础
许多个人计算机和工作站都有两个或四个内核(即 CPU),使多个线程能够同时执行。 在不久的将来,计算机预期会有更多的内核。 为了利用当今和未来的硬件,您可以对代码进行并行化,以将工作分摊在多个处理器上。 过去,并行化需要线程和锁的低级操作。 Visual Studio 2010 和 .NET Framework 4 提供了新的运行时、新的类库类型以及新的诊断工具,从而增强了对并行 ...
VB.NET并行与分布式编程(8)-net 分布式计算环境
更多请看
http://msdn.microsoft.com/zh-cn/library/system.runtime.remoting.aspx
一、Remoting基础
什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式 ...
VB.NET并行与分布式编程(7)-线程池[2]
在此,我们仅以GetAvailableThreads为例:
当 GetAvailableThreads 返回时,workerThreads 指定的变量包含可以启动的其他辅助线程的数目,而 completionPortThreads 指定的变量包含可以启动的其他异步 I/O 线程的数目
代码如下:
Imports System
Imports System.Threading
Impor ...
VB.NET并行与分布式编程(7)-线程池[1]
一、CLR线程池管理2类线程
1、普通的工作线程
1)使用QueuUserWorkItem
2)ThreadPool.QueueUserWorkItem 方法
方法排入队列以便执行。此方法在有线程池线程变得可用时执行
QueueUserWorkItem(WaitCallback) 将方法排入队列以便执行。此方法在有线程池线程变得可用时执行。 QueueUserWorkIte ...
VB.NET并行与分布式编程(6)-线程与内核同步[18]
一、RegisterWaitForSingleObject 方法
RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) 注册一个等待 WaitHandle 的委托,并指定一个 32 位带 ...
VB.NET并行与分布式编程(6)-线程与内核同步[17]
ReaderWriterLockSlim.EnterUpgradeableReadLock 方法尝试进入可升级模式锁定状态。
此方法在调用线程进入锁定状态之前一直处于阻塞状态,因此可能永远都不返回。 使用 TryEnterUpgradeableReadLock 方法阻塞指定的间隔时间,如果调用线程在此间隔期间并未进入可升级模式,将返回。
如果线程在读取模式下经常访问受 ReaderWri ...
VB.NET并行与分布式编程(6)-线程与内核同步[16]
Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
Dim myLock As New ReaderWriterLockSlim()
Dim ...
VB.NET并行与分布式编程(6)-线程与内核同步[15]
ReaderWriterLockSlim类是.NET框架提供的一个轻量级的,写入托管代码中的能产生更优性能的锁
代码如下:
Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Mo ...
VB.NET并行与分布式编程(6)-线程与内核同步[14]
Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
Sub Main()
Dim mythread1 As Thread
...
VB.NET并行与分布式编程(6)-线程与内核同步[13]
Imports System
Imports System.Threading
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
'生产者线程和消费者线程共同操作的数
Dim mycounts As Integer = ...
VB.NET并行与分布式编程(6)-线程与内核同步[12]
我们还可以使用信号量来完成同步
Semaphore 类限制可同时访问某一资源或资源池的线程数,即信号量。
线程通常使用 WaitOne 方法进入信号量,并且通常使用此方法重载以退出
WaitOne 方法阻止当前线程,直到当前 WaitHandle 收到信号为止,即增加减少一个信号量
Semaphore.Release 方法退出信号量并返回前一个计数,增加一个信号量。
...
VB.NET并行与分布式编程(6)-线程与内核同步[11]
Imports System
Imports System.Threading
Imports System.Runtime.InteropServices
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
'定义异步方法
Delegate F ...
VB.NET并行与分布式编程(6)-线程与内核同步[10]
E)代码分析
上节代码是最简单的异步调用代码,即调用委托的 BeginInvoke 方法来开始执行方法,在主线程上执行一些工作,然后调用委托的 EndInvoke 方法。但是EndInvoke 直到异步调用完成之后才返回,因此可能会阻止调用线程(即主线程)。
a) 声明异步方法 ,必须与后面要使用的异步调用的方法一致
Delegate Function myAdds(ByVal nu ...
VB.NET并行与分布式编程(6)-线程与内核同步[9]
3)使用委托的异步调用实现多线程的参数转入和传出
A)基础知识
a)Delegate 类是委托类型的基类。然而,只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate 类派生。此外,还不允许从委托类型派生新类型。Delegate 类不是委托类型,该类用于派生委托类型, 应当使用语delegate 关键字声明。
b)委托类型的声明建立了一个协定,该协定指定一个或 ...
VB.NET并行与分布式编程(6)-线程与内核同步[8]
2)我们可以用更好的方式使用.NET的委托和线程池
A)委托
WaitCallback 委托,表示线程池线程要执行的回调方法。
WaitCallback 表示要在 ThreadPool 线程上执行的回调方法。 创建委托,方法是将回调方法传递给 WaitCallback 构造函数。 您的方法必须具有此处所显示的签名。
通过将 WaitCallback 委托传递给 ThreadPool ...
VB.NET并行与分布式编程(6)-线程与内核同步[7]
我们继续扩展刚才的话题,再次使用WaitAny完成一个简单的任务,求100以内阶乘之和
完成这个任务我们先来解决几个问题
1、如何将线程计算结果传出来,参数可以传入,而且只能传入一个,如何传入多个参数,并输出多个参数?
1)最经典的方法是定义一个类,这个类存放了传入的参数和传出的参数
Imports System
Imports System.Threading
Imports S ...
VB.NET并行与分布式编程(6)-线程与内核同步[6]
1、
1)WaitHandle.WaitAny 方法和WaitHandle.WaitAll方法的区别在于,WaitAny方法只等待指定数组中的任一元素收到信号。
2)我们使用WaitHandle.WaitAny 方法完成一个示例,这个示例同时使用5个线程完成相同的工作:计算从1到2000的累加,哪个线程最先完成计算任务,就终止其它正在计算的线程。为了增强效果,我们指定最后一个线程的优先级最高,结 ...
VB.NET并行与分布式编程(6)-线程与内核同步[5]
在以前的示例中,主线程都是以join的方式等待3个工作线程一起完成连续减法运算,现在我们用上节所说的WaitHandle类,我们使用其中的一个方法WaitHandle.WaitAll,这个方法能同时等待多个线程,只至所有等待对象都完成
msdn上的说明:
WaitHandle.WaitAll (WaitHandle[]), 等待指定数组中的所有元素都收到信号
代码如下:
Imports ...