- Процессы и потоки Windows
- Читайте также
- Процессы и потоки
- Процессы и потоки
- 2. Процессы и потоки
- Потоки
- Процессы, задачи, задания, группы активизации и потоки
- 10.4 ПОТОКИ
- 1.2. Процессы, потоки и общий доступ к информации
- Потоки
- 38. Потоки
- 7.3.1.2. Потоки
- 7.3.1.2. Потоки
- 2.2.1.1 Потоки
- 8.3 Файлы и Потоки
- ГЛABA 6 Процессы, потоки и задания
- Потоки и работа с ними Threads and threading
- Процессы и потоки Processes and threads
- Цели применения нескольких потоков When to use multiple threads
- Как использовать многопоточность в .NET How to use multithreading in .NET
Процессы и потоки Windows
Процессы и потоки Windows
Внутри каждого процесса могут выполняться одна или несколько потоков, и именно поток является базовой единицей выполнения в Windows. Выполнение потоков планируется системой на основе обычных факторов: наличие таких ресурсов, как CPU и физическая память, приоритеты, равнодоступность ресурсов и так далее. Начиная с версии NT4, в Windows поддерживается симметричная многопроцессорная обработка (Symmetric Multiprocessing, SMP), позволяющая распределять выполнение потоков между отдельными процессорами, установленными в системе.
С точки зрения программиста каждому процессу принадлежат ресурсы, представленные следующими компонентами:
• Одна или несколько потоков.
• Виртуальное адресное пространство, отличное от адресных пространств других процессов, если не считать областей памяти, распределенных явным образом для совместного использования (разделения) несколькими процессами. Заметьте, что разделяемые отображенные файлы совместно используют физическую память, тогда как разделяющие их процессы используют различные виртуальные адресные пространства.
• Один или несколько сегментов кода, включая код DLL.
• Один или несколько сегментов данных, содержащих глобальные переменные.
• Строки, содержащие информацию об окружении, например, информацию о текущем пути доступа к файлам.
• Различного рода ресурсы, например, дескрипторы открытых файлов и другие кучи.
Поток разделяет вместе с процессом код, глобальные переменные, строки окружения и другие ресурсы. Каждый поток планируется независимо от других и располагает следующими элементами:
• Стек, используемый для вызова процедур, прерываний и обработчиков исключений, а также хранения автоматических переменных.
• Локальные области хранения потока (Thread Local Storage, SLT) — массивы указателей, используя которые каждый поток может создавать собственную уникальную информационную среду.
• Аргумент в стеке, получаемый от создающего потока, который обычно является уникальным для каждого потока.
• Структура контекста, поддерживаемая ядром системы и содержащая значения машинных регистров.
На рис. 6.1 показан процесс с несколькими потоками. Рисунок является схематическим, поэтому на нем не указаны фактические адреса памяти и не соблюдены масштабы.
В данной главе показано, как работать с процессами, состоящими из единственного потока. О том, как использовать несколько потоков, рассказывается в главе 7.
Примечание
Рисунок 6.1 является высокоуровневым с точки зрения программиста представлением процесса. В действительности эта картина должна быть дополнена множеством технических деталей и особенностями реализации. Более подробную информацию заинтересованные читатели могут найти в книге Соломона (Solomon) и Руссиновича (Russinovich) Inside Windows 2000.
Процессы UNIX сопоставимы с процессами Windows, имеющими единственный поток.
Реализации UNIX недавно пополнились потоками POSIX Pthreads, которые в настоящее время используются почти повсеместно. В [40] потоки не обсуждаются; все рассмотрение основано на процессах.
Наверное, можно было бы даже не напоминать о том, что понятие потоков не является новым, и их различные реализации предлагаются поставщиками уже на протяжении целого ряда лет. Однако потоки Pthreads являются самым распространенным стандартом, в то время как коммерческие реализации потоков являются устаревшими.
Рис. 6.1. Процесс и его потоки
Читайте также
Процессы и потоки
Процессы и потоки В этой главе представлено описание процессов и потоков в QNX/ Neutrino, диспетчеризации, системы приоритетов, и дано понятие о реальном времени. Вы узнаете о состояниях потоков и алгоритмах диспетчеризации, которые применяются в QNX/ Neutrino, а также изучите
Процессы и потоки
Процессы и потоки Вернемся к нашим рассуждениям о потоках и процессах, но на сей раз с точки зрения перспективы их применения в системах реального времени. Затем мы рассмотрим вызовы функций, которые применяются при работе с потоками и процессами.Мы знаем, что процесс
2. Процессы и потоки
2. Процессы и потоки При внимательном чтении технической документации [8] и литературы по ОС QNX [1] отчетливо бросается в глаза, что тонкие детали создания и функционирования процессов и потоков описаны крайне поверхностно и на весьма некачественном уровне. Возможно, это
Потоки
Потоки Последующие расширения[14] POSIX специфицируют широкий спектр механизмов «легких процессов» — потоков (группа API pthread_*()). Техника потоков вводит новую парадигму программирования вместо уже ставших традиционными UNIX-методов. Это обстоятельство часто недооценивается.
Процессы, задачи, задания, группы активизации и потоки
Процессы, задачи, задания, группы активизации и потоки Как уже упоминалось, первоначально в AS/400 было определено три уровня работы. Самый низкий уровень, под MI, — задача. Процесс «живет» на уровне MI и построен на структуре задач SLIC. Поверх модели процессов MI OS/400 в качестве
10.4 ПОТОКИ
10.4 ПОТОКИ Схема реализации драйверов устройств, хотя и отвечает заложенным требованиям, страдает некоторыми недостатками, которые с годами стали заметнее. Разные драйверы имеют тенденцию дублировать свои функции, в частности драйверы, которые реализуют сетевые
1.2. Процессы, потоки и общий доступ к информации
1.2. Процессы, потоки и общий доступ к информации В традиционной модели программирования Unix в системе могут одновременно выполняться несколько процессов, каждому из которых выделяется собственное адресное пространство. Это иллюстрирует рис. 1.1. Рис. 1.1. Совместное
Потоки
Потоки Хотя концепция процессов в системах Unix используется уже очень давно, возможность использовать несколько потоков внутри одного процесса появилась относительно недавно. Стандарт потоков Posix.1, называемый Pthreads, был принят в 1995 году. С точки зрения взаимодействия
38. Потоки
38. Потоки Язык C++ не обладает средствами для ввода/вывода. Ему это и не нужно; подобные средства легко и элегантно можно создать, применяя сам язык. Стандартная библиотека потокового ввода/вывода дает возможность осуществлять гибкий и эффективный с гарантией типа метод
7.3.1.2. Потоки
7.3.1.2. Потоки Потоки (streams) сетевого взаимодействия были разработаны Деннисом Ритчи для Unix Version 8 (1985). Их новая реализация называется STREAMS (именно так, в документации все буквы прописные). Впервые она стала доетупной в версии 3.0 System V Unix (1986). Средство STREAMS обеспечивало
7.3.1.2. Потоки
7.3.1.2. Потоки Потоки (streams) сетевого взаимодействия были разработаны Деннисом Ритчи для Unix Version 8 (1985). Их новая реализация называется STREAMS (именно так, в документации все буквы прописные). Впервые она стала доступной в версии 3.0 System V Unix (1986). Средство STREAMS обеспечивало
2.2.1.1 Потоки
2.2.1.1 Потоки Архитектуру INFORMIX-OnLine DS называют также многопотоковой. Для каждого клиента создается так называемый поток, или нить (thread). Поток — это подзадача, выполняемая в рамках одного из серверных процессов. В некоторых случаях для обслуживания одного клиентского
8.3 Файлы и Потоки
8.3 Файлы и Потоки Потоки обычно связаны с файлами. Библиотека потоков содает стандартный поток ввода cin, стандартный поток вывода cout и стандартный поток ошибок cerr. Программист может отрывать другие файлы и создавать для них
ГЛABA 6 Процессы, потоки и задания
ГЛABA 6 Процессы, потоки и задания B этой главе мы рассмотрим структуры данных и алгоритмы, связанные с процессами, потоками и заданиями в Microsoft Windows. B первом разделе основное внимание уделяется внутренним структурам данных, из которых состоит процесс. Bo втором разделе
Потоки и работа с ними Threads and threading
Многопоточность позволяет увеличивать скорость реагирования приложения и, если приложение работает в многопроцессорной или многоядерной системе, его пропускную способность. Multithreading allows you to increase the responsiveness of your application and, if your application runs on a multiprocessor or multi-core system, increase its throughput.
Процессы и потоки Processes and threads
Процесс — это исполнение программы. A process is an executing program. Операционная система использует процессы для разделения исполняемых приложений. An operating system uses processes to separate the applications that are being executed. Поток — это основная единица, которой операционная система выделяет время процессора. A thread is the basic unit to which an operating system allocates processor time. Каждый поток имеет приоритет планирования и набор структур, в которых система сохраняет контекст потока, когда выполнение потока приостановлено. Each thread has a scheduling priority and maintains a set of structures the system uses to save the thread context when the thread’s execution is paused. Контекст потока содержит все сведения, позволяющие потоку безболезненно возобновить выполнение, в том числе набор регистров процессора и стек потока. The thread context includes all the information the thread needs to seamlessly resume execution, including the thread’s set of CPU registers and stack. Несколько потоков могут выполняться в контексте процесса. Multiple threads can run in the context of a process. Все потоки процесса используют общий диапазон виртуальных адресов. All threads of a process share its virtual address space. Поток может исполнять любую часть программного кода, включая части, выполняемые в данный момент другим потоком. A thread can execute any part of the program code, including parts currently being executed by another thread.
Платформа .NET Framework предоставляет способ изоляции приложений в процессе с помощью доменов приложений. .NET Framework provides a way to isolate applications within a process with the use of application domains. (Домены приложений недоступны в .NET Core.) Дополнительные сведения см. в разделе Домены приложений и потоки в статье Домены приложений. (Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.
По умолчанию программа .NET запускается с одним потоком, часто называемым основным потоком. By default, a .NET program is started with a single thread, often called the primary thread. Тем не менее она может создавать дополнительные потоки для выполнения кода параллельно или одновременно с основным потоком. However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Эти потоки часто называются рабочими потоками. These threads are often called worker threads.
Цели применения нескольких потоков When to use multiple threads
Используйте несколько потоков, чтобы увеличить скорость реагирования приложения и воспользоваться преимуществами многопроцессорной или многоядерной системы, чтобы увеличить пропускную способность приложения. You use multiple threads to increase the responsiveness of your application and to take advantage of a multiprocessor or multi-core system to increase the application’s throughput.
Представьте себе классическое приложение, в котором основной поток отвечает за элементы пользовательского интерфейса и реагирует на действия пользователя. Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. Используйте рабочие потоки для выполнения длительных операций, которые, в противном случае будут занимать основной поток, в результате чего пользовательский интерфейс будет недоступен. Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. Для более оперативной реакции на входящие сообщения или события также можно использовать выделенный поток связи с сетью или устройством. You can also use a dedicated thread for network or device communication to be more responsive to incoming messages or events.
Если программа выполняет операции, которые могут выполняться параллельно, можно уменьшить общее время выполнения путем выполнения этих операций в отдельных потоках и запуска программы в многопроцессорной или многоядерной системе. If your program performs operations that can be done in parallel, the total execution time can be decreased by performing those operations in separate threads and running the program on a multiprocessor or multi-core system. В такой системе использование многопоточности может увеличить пропускную способность, а также повысить скорость реагирования. On such a system, use of multithreading might increase throughput along with the increased responsiveness.
Как использовать многопоточность в .NET How to use multithreading in .NET
Начиная с .NET Framework 4, для многопоточности рекомендуется использовать библиотеку параллельных задач (TPL) и Parallel LINQ (PLINQ). Starting with .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Дополнительные сведения см. в разделе Параллельное программирование. For more information, see Parallel programming.
Библиотека параллельных задач и PLINQ полагаются на потоки ThreadPool. Both TPL and PLINQ rely on the ThreadPool threads. Класс System.Threading.ThreadPool предоставляет приложения .NET с пулом рабочих потоков. The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. Также можно использовать потоки из пула потоков. You can also use thread pool threads. Дополнительные сведения см. в разделе Управляемый пул потоков. For more information, see The managed thread pool.
Наконец, можно использовать класс System.Threading.Thread, который представляет управляемый поток. At last, you can use the System.Threading.Thread class that represents a managed thread. Дополнительные сведения см. в разделе Использование потоков и работа с потоками. For more information, see Using threads and threading.
Несколько потоков могут требовать доступ к общему ресурсу. Multiple threads might need to access a shared resource. Чтобы сохранить ресурс в неповрежденном состоянии и избежать состояния гонки, необходимо синхронизировать доступ к нему потоков. To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. Вы также можете координировать взаимодействие нескольких потоков. You also might want to coordinate the interaction of multiple threads. Платформа .NET предоставляет ряд типов для синхронизации доступа к общему ресурсу или координации взаимодействия потоков. .NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Дополнительные сведения см. в разделе Обзор примитивов синхронизации. For more information, see Overview of synchronization primitives.
Исключения следует обрабатывать в потоках. Do handle exceptions in threads. Необработанные исключения в потоках, как правило, приводят к завершению процесса. Unhandled exceptions in threads generally terminate the process. Дополнительные сведения см. в статье Исключения в управляемых потоках. For more information, see Exceptions in managed threads.