Я написал приложение 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;