做到这一点的唯一方法是使用多个线程 -RPS * ConnectionTimeout
如果所有请求都必须等待并且您没有使用异步 IO,则可能最多使用多个线程。
您可以作弊并使用ThreadPool(但请注意,它不保证 re: scheduling)。如果您使用的是 .Net 4,还有任务并行库。
对于 ~20 RPS,我怀疑缺乏 ThreadPool 精度将是一个问题。当您获得更高的 RPS 时,情况将会改变。
如果你想自己动手做,请注意很难做好。一个简单的实现是让一个主工作线程为每个连接启动新线程......
Private ShutdownRequested As Boolean = False
Public Sub StartLoad(RPS As Integer)
ShutdownRequested = False
Dim MainThread As New Threading.Thread(Sub() Worker(RPS))
MainThread.Start()
End Sub
Public Sub StopLoad()
ShutdownRequested = True
End Sub
Private Sub Worker(RPS As Integer)
While Not ShutdownRequested
Threading.Thread.Sleep(CInt(1 / RPS * 1000))
Dim Worker As New Threading.Thread(Sub() OpenAConntection())
End While
End Sub
更好的方法是使用此处描述的异步 IO 机制,因为它允许使用有限数量的线程进行许多连接。
这篇文章也可能对 re:threading 感兴趣