Однопоточное приложение похоже на супермаркет, где работает единственный кассир. Один кассир обходится владельцу магазина дешевле, но он может обслужить за определенное время сравнительно немного клиентов. Но как только супермаркет объявляет распродажу, очередь у кассы растет. При этом некоторые клиенты проявляют сильное недовольство. Здесь мы имеем стандартный сценарий с "узким местом": слишком много данных и слишком маленькая пропускная способность. Словом, нужны дополнительные кассиры.
Так же обстоят дела с потоками и приложениями. Многопоточность позволяет приложениям разделять задачи и работать над каждой независимо, чтобы максимально эффективно задействовать процессор и пользовательское время. Однако если вы новичок в программировании многопоточности, хочу предупредить:
не стоит выбирать многопточность для всех приложений, работа некоторых из них при этом может даже замедлиться.
Важно, чтобы одновременно с изучением синтаксиса многопоточности вы также поняли, когда ее использовать. Чтобы помочь вам определить, когда следует идти по пути создания нескольких потоков в ваших приложениях, я поместил в конце главы раздел "Правила использования потоков". А сейчас давайте начнем с рассмотрения способа реализации потоков в Microsoft .NET Framework.