Почему потоки не работают даже в ОС с вытесняющей многозадачностью (Windows 7)

Я написал приложение Win32 (в Delphi -7, которое является 32 -битным, используя класс TThread )для создания 100 потоков. Каждый поток при возобновлении будет непрерывно (в цикле )увеличивать 64-битный счетчик, связанный с объектом потока (, поэтому не будет блокировки или совместного использования данных ).

Если вы дадите системе поработать 10-15 секунд и остановитесь после этого, вы должны увидеть примерно одинаковые значения в каждом из потоков. Но я заметил, что 81 поток выполнил менее 400 миллионов циклов, а остальные зациклились более 950 миллионов раз. Самый медленный поток получил только 230 миллионов по сравнению с самым быстрым 2111 миллионами.

Согласно MSDN, вытесняющая многозадачность находится на уровне потока -(, а не на уровне процесса ), поэтому каждый из моих потоков должен был получить свой временной -срез циклическим -методом. Что мне здесь не хватает и почему это несоответствие?

Редактировать1 :Конфигурация компьютера :Четырехъядерный процессор Intel i7 3,4 ГГц с включенной многопоточностью -(8 активных потоков одновременно ). Запуск Windows -7 64-разрядная профессиональная (и тестовое приложение является 32-разрядным)

Edit2 (код потока ):Тестовое приложение создано с включенной оптимизацией и без какой-либо отладочной информации. Запустите тестовое приложение вне IDE.

type

  TMyThread = class(TThread)
  protected
    FCount: Int64;
  public
    constructor Create;
    procedure Execute; override;
    property Count: Int64 read FCount;
  end;


{ TMyThread }

constructor TMyThread.Create;
begin
  inherited Create(True);
  FCount := 0;
end;  

procedure TMyThread.Execute;
begin
  inherited;
  while not Terminated do
  begin
    Inc(FCount);
  end;
end;
10
задан ssh 1 October 2012 в 23:22
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: