Вопрос по Thread.Sleep(1)?
Потому что контекст переключается по таймеру. Thread.Sleep(n) усыпляет поток на не менее чем n мс.
И да, гугл поможет.
А причем здесь секунды.
Поток уснул, попал в конец очереди со своим приоритетом, время выйдет, он попросится назад, если CPU за это время на это ядро не выдавал время потоку из другого процесса, то восстанавливать адресное пространство не придется, и он только загрузит состояние потока на котором его убирал и продолжит работу.
Скорость работы кода всегда будет разная.