У меня есть процесс, где мой основной поток читает файл и разбивает его на части. Затем эти части требуют дальнейшей обработки. Я хотел бы использовать любые доступные потоки, чтобы последующая обработка использовала как можно больше ЦП (или как много ядер). Я не хочу создавать избыточное отставание от основного потока, поэтому мне нужно, чтобы основной поток ожидал добавления в очередь, пока не появится еще один доступный поток..NET - Блокировать основной поток до тех пор, пока не будут доступны потоки
Я вижу много статей, как VB.NET 4.0: Looking to execute multiple threads, but wait until all threads are completed before resuming, но они ждут все темы завершить, тогда мне просто нужно любые темы будут доступны
Это то, что я могу решать с Task Parallel Library, или должны Я вручную создаю потоки и контролирую threadpool?
Using Reader As New StreamReader(FileName)
Do
CurrentBlockSize = Reader.ReadBlock(CurrentBuffer, 0, BufferSize)
RunningBuffer &= New String(CurrentBuffer)
If RunningBuffer.Contains(RowDelimiter) Then
LineParts = RunningBuffer.Split(RowDelimiter)
For I As Integer = 0 To LineParts.Count - 1
If I < LineParts.Count - 1 Then
'Make synchronous call that blocks until'
'another thread is available to process the line'
AddLineToTheProcessingQueue(CurrentLine)
Else
RunningBuffer = LineParts(I)
End If
Next
End If
Loop While CurrentBlockSize = BufferSize
End Using
Это почти наверняка потерянное усилие, такой код почти всегда связан с диском. Простая проверка: перезагрузите компьютер и запустите однопоточную версию. Если загрузка процессора на одно ядро не превышает 50%, то добавление большего количества потоков не может сделать его быстрее. –
@ HansPassant, работа в нисходящем направлении будет включать обработку и отправку больших объемов данных в базу данных по TCP/IP, что, вероятно, будет медленнее, чем на диске. Это часть, которую я хочу многопоточным. –
Затем потяните, не нажимайте данные. Как и большинство программ, они читают файл. –