Я хочу добавить работников в очередь, но только первые N рабочих обрабатывают параллельно. Все образцы, которые я нахожу, находятся на C#.Мне нужна помощь в создании TaskScheduler для предотвращения перегрузки потоком
Это, наверное, просто для программиста, но я не один. Я достаточно знаю о VB, чтобы писать простые программы.
Но мое первое приложение работает нормально, пока оно внезапно не достигнет 100% -ного CPU, а затем сработает. Помогите, пожалуйста (да, я потратил 5 часов на поиск рабочего времени, прежде чем публиковать это ...)
Подробнее Контекст: Выполнение рекурсивного инвентаризации структур каталогов, файлов и разрешений на файловых серверах с более чем 1 миллионом каталогов/подкаталогов.
Процесс работает серийно, но для его завершения потребуется несколько месяцев. Менеджмент уже дышит мне на шею. Когда я пытаюсь использовать Tasks, он переходит к примерно 1000 потокам, затем обращается к 100% процессору, перестает отвечать на запросы, а затем падает. Это на 16-ядерном сервере с 112 ГБ оперативной памяти.
--Added Таким образом, с образцом, представленной на использовании семафоров, это то, что я поместил в:
Public Class InvDir
Private mSm as Semaphore
Public Sub New(ByVal maxPrc As Integer)
mSm = New Semaphore(maxPrc, maxPrc)
End Sub
Public Sub GetInventory(ByVal Path As String, ByRef Totals As Object, ByRef MyData As Object)
mSm.WaitOne()
Task.Factory.StartNew(Sub()
Dim CurDir As New IO.DirectoryInfo(Path)
Totals.SubDirectoryCount += CurDir.GetDirectories().Count
Totals.FilesCount += CurDir.GetFiles().Count
For Each CurFile As IO.FileInfo in CurDir.EnumerateFiles()
MyData.AddFile(CurFile.FileName, CurFile.Extension, CurFile.FullName, CurFile.Length)
Next
End Sub).ContinueWith(Function(x) mSm.Release())
End Sub
End Class
Сообщите «Менеджменту», чтобы нанять консультанта. – Plutonix
Ваш вопрос слишком широк по объему, и мы не можем объяснить, почему код, который мы не видим, не ведет себя правильно. Мы не собираемся писать планировщик задач для вас, и мы не являемся учебным сайтом, где мы можем научить вас делать это. Если вы * достаточно знаете о VB для написания простых программ *, то, что вы спрашиваете, выше вашего текущего набора навыков, и вам нужно сообщить руководству, что вам нужна помощь, чтобы они могли нанять подрядчика или программиста. –
Я не прошу кого-нибудь написать «планировщик задач». В .NET есть объект TaskScheduler OBJECT и весь пример кода, который я нахожу, как использовать его на C#. Я только спрашивал, как это сделать в VB.NET. Я вложил то, что я делаю, чтобы дать контекст, не прося кого-то сделать для меня свою работу. Я попытался использовать объекты Collection of Task и методы Parallel.ForEach, но вскоре они заняли все потоки. – HelpThisisNOTmyJob