У меня есть класс, который реализует бесконечный рабочий поток, например, this, например, в моем случае, представляющем тело. Во время выполнения я буду иметь от 0 до ~ 8 экземпляров в реальном времени в любое время с постоянно создаваемыми и уничтожаемыми экземплярами.Threadpool с бесконечными рабочими потоками
В большинстве случаев этот класс имеет жизненный цикл от 30 секунд до 5 минут, но иногда может быть несколько экземпляров, созданных и уничтоженных за относительно короткий период времени. Именно здесь я склонен сталкиваться с проблемами производительности, учитывая низкую спецификацию аппаратного обеспечения, на котором этот код работает.
Теперь я хотел бы переписать поведение, чтобы использовать ThreadPool для моей коллекции работающих рабочих, и я изо всех сил пытаюсь найти правильный способ структурирования кода.
В основном код у меня есть на данный момент что-то вроде
public class BodyCollection : IReadOnlyDictionary<ulong, TrackedBody>
{
public void Update()
{
if (createNew)
{
var body = new TrackedBody();
body.BeginTracking();
this.Add(1234, body);
}
if (remove)
{
TrackedBody body = this[1234];
body.StopTracking();
this.Remove(body);
}
}
}
public class TrackedBody
{
private readonly Thread _BiometricsThread;
private volatile bool _Continue = true;
public TrackedBody()
{
_BiometricsThread = new Thread(RunBiometricsThread);
}
public void BeginTracking()
{
_BiometricsThread.Start();
}
public void StopTracking()
{
_Continue = false;
}
private void RunBiometricsThread()
{
while(_Continue)
{
System.Threading.Thread.Sleep(1000);
}
}
}
Так как же я вновь пишу выше, чтобы использовать ThreadPool правильно и так, что я могу отменить запуск темы на ThreadPool по мере необходимости? Я использую CancellationTokens или ManualResetEvents для управления потоками?
Вы просто этого не делаете, потоки, подобные этим, являются ядом для пула потоков. Они предотвращают своевременное обслуживание других потоков tp. Разумный максимум составляет полсекунды, за что он начинает плохо забивать трубы. Не делай этого. –
@HansPassant Я вижу ... Не могли бы вы сказать, что приведенное выше верно, если даже ваше приложение - это ТОЛЬКО приложение, работающее на данном устройстве? –
Это не имеет ничего общего с приложениями, это касается потоков. –