Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Когда полезно создавать потоки




Любой поток, подобно процессу, состоит из двух компонентов:

· объекта ядра, через который операционная система управляет потоком. Там же хранится статистическая информация о потоке;

· стека потока, который содержит параметры всех функций и локальные переменные, необходимые потоку для выполнения кода.

 

Сам по себе процесс ничего не исполняет, он просто служит контейнером потоков. Потоки всегда создаются в контексте какого-либо процесса. На практике это означает, что потоки исполняют код и манипулируют данными в адресном пространстве процесса. Поэтому, если два и более потока выполняются в контексте одного процесса, все они делят одно адресное пространство. Потоки могут исполнять один и тот же код и манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах.

Очевидно, что процессы используют куда больше системных ресурсов, чем потоки. Причина кроется в адресном пространстве. Создание виртуального адресного пространства для процесса требует значительных системных ресурсов. При этом ведется масса всяческой статистики, на что уходит немало памяти. В адресное пространство загружаются EXE- и DLL-файлы, а значит, нужны файловые ресурсы. С другой стороны, потоку требуются лишь соответствующий объект ядра и стек; объем статистических сведений о потоке невелик и много памяти не занимает. Так как потоки расходуют существенно меньше ресурсов, чем процессы, то эффективнее решать свои задачи за счет использования дополнительных потоков, а не создания новых процессов. Только нельзя принимать этот совет за жесткое правило — многие проекты как раз лучше реализовать на основе множества процессов. Нужно просто помнить об издержках и соразмерять цель и средства.

Поток определяет последовательность исполнения кода в процессе. При инициализации процесса система всегда создает первичный поток. Начинаясь со стартового кода из библиотеки С/С++, который в свою очередь вызывает входную функцию (__tmain, _tWinMain) из вашей программы, он живет до того момента, когда входная функция возвращает управление стартовому коду и тот вызывает функцию ExitProcess. Большинство приложений обходится единственным, первичным потоком. Однако процессы могут создавать дополнительные потоки, что позволяет им эффективнее выполнять свою работу. У каждого компьютера есть чрезвычайно мощный ресурс — центральный процессор. И нет абсолютно никаких причин тому, чтобы этот процессор про- стаивал (не считая экономии электроэнергии). Чтобы процессор всегда был при деле, вы нагружаете его самыми разнообразными задачами. Вот несколько примеров.

1. Программа дефрагментации дисков, поставляемая с Windows, может работать в фоновом режиме благодаря потокам с более низким приоритетом и дефрагментировать диски в те моменты, когда других дел у системы нет.

2. IDE Visual Studio автоматически компилирует исходный код на C# и Visual Basic .NET, пока вы продолжаете ввод ее текста. При этом в окне редактора ошибочные фрагменты кода выделяются подчеркиванием, а IDE выводит соответствующие предупреждения и сообщения об ошибках, если навести указатель мыши на подчеркнутый фрагмент.

3. Антивирусные программы обычно используют потоки с невысоким приоритетом для сканирования дисков в фоновом режиме.

4. Электронные таблицы пересчитывают данные в фоновом режиме.

5. Текстовые процессоры разбивают текст на страницы, проверяют его на орфографические и грамматические ошибки, а также печатают в фоновом режиме.

6. Файлы можно копировать на другие носители тоже в фоновом режиме.

7. Веб-браузеры способны взаимодействовать с серверами в фоновом режиме, благодаря чему пользователь может перейти на другой веб-узел, не дожидаясь, когда будут получены результаты с текущего веб-узла.

 

Одна важная вещь, на которую вы должны были обратить внимание во всех этих примерах, заключается в том, что поддержка многопоточности позволяет упростить пользовательский интерфейс приложения. Если компилятор ведет сборку вашей программы в те моменты, когда вы делаете паузы в наборе ее текста, отпадает необходимость в командах меню Build. То же самое относится к командам проверки правописания в текстовых процессорах. В примере с веб-браузером выделение ввода-вывода (сетевого, файлового или какого-то другого) в отдельный поток обеспечивает «отзывчивость» пользовательского интерфейса приложения даже при интенсивной передаче данных. Вообразите приложение, которое сортирует записи в базе данных, печатает документ или копирует файлы. Возложив любую из этих задач, так или иначе связан- ных с вводом-выводом, на отдельный поток, пользователь может по-прежнему работать с интерфейсом приложения и при необходимости отменить операцию, выполняемую в фоновом режиме. Многопоточное приложение легче масштабируется: каждый поток можно закрепить за определенным процессором. Следовательно, если в вашем компьютере имеется два процессора, а в приложении — два потока, оба процессора будут при деле. И фактически вы сможете выполнять две задачи одновременно.










Последнее изменение этой страницы: 2018-04-12; просмотров: 366.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...