我继承了下面的一些代码,运行得很好,唯一的问题是,我希望能够限制在任何时候运行的线程的数量,目前我有大约8-10个并行运行的作业,我想在任何时候将线程的数量限制在3到4个,这可以在不做太多更改的情况下使用下面的代码吗?
Public Sub threading_Example()
Dim threadList As New List(Of Thread)
For n = 0 To numJobs 'about 8-10 normally
Dim new_job As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf do_Job))
Dim job As New Job
'job.stuff = stuff
newJob.Start(job)
threadList.Add(new_job)
Next
For Each t As Thread In threadList
t.Join()
Next
End Sub
Public Sub do_Job(ByVal job As Object)
'do task
End Sub发布于 2012-10-24 20:25:55
尝试使用Semaphore,例如:
ReadOnly Sem As New Semaphore(3, 4)
Sub Main()
Dim threadList As New List(Of Thread)
Dim numJobs As Integer
For n = 0 To numJobs
Dim new_job As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf do_Job))
new_job.Start()
threadList.Add(new_job)
Next
For Each t As Thread In threadList
t.Join()
Next
End Sub
Public Sub do_Job(ByVal job As Object)
Sem.WaitOne()
'only 3 or 4 threads at time can do task
Sem.Release()
End Sub发布于 2012-10-24 19:54:29
我的建议是使用线程池。线程池中内置了许多优化功能。例如,线程池可以确定机器拥有的核心数量,并相应地调度线程数量。如果创建了更多的线程,但没有正确利用,线程池将杀死更多的线程。
考虑使用线程池重构代码。线程池还具有限制线程数量的选项(但不建议这样做)。
发布于 2012-10-24 19:55:22
我建议使用ThreadPool。您可以通过SetMin|MaxThread方法限制它使用的线程数。
https://stackoverflow.com/questions/13047614
复制相似问题