Что такое "поток" (действительно)?

Я пытаюсь найти хорошее определение и понять, что такое поток.

Кажется, что я должен упустить что-то очевидное, но каждый раз, когда я читаю о том, что такое поток, это почти круговое определение, а "поток - это поток выполнения" или "способ разделить на запущенные задачи" ". Ух. А?

Похоже на то, что я прочитал, что нить не является чем-то конкретным, как процесс. Это на самом деле просто концепция. Из того, что я понимаю о том, как это работает, процессор выполняет некоторые команды для программы (которая называется потоком исполнения), а затем, когда ей нужно немного переключиться на обработку для какой-либо другой программы, она сохраняет состояние программу, которую он в настоящее время выполняет для чего-либо (Thread Local Storage), а затем начинает выполнение других инструкций программы. И обратно, и вперед. Таким образом, поток - это просто концепция для "одного из путей выполнения" программы, которая в настоящее время работает.

В отличие от процесса, который действительно является чем-то - это конгломерат ресурсов и т.д.

В качестве примера определения, которое на самом деле не очень помогло мне.,.

От Wikipedia:

"Нить в информатике является короткой для потока выполнения. Темы - это способ разделить программу (называемую" split ") на две или более одновременно (или псевдо-одновременно) запущенных задач. Темы и процессы отличаются от одной операционной системы к другой, но в общем случае поток содержится внутри процесса, а разные потоки в одном и том же процессе используют одни и те же ресурсы, в то время как разные процессы в одной и той же многозадачной операционной системе этого не делают".

Так я прав? Неправильно? Что такое поток на самом деле?

Изменить: По-видимому, потоку также предоставляется собственный стек вызовов, так что это определенная вещь.

Ответ 1

Поток - это независимый набор значений для регистров процессора (для одного ядра). Так как это включает указатель инструкций (aka Program Counter), он контролирует, что выполняется в каком порядке. Он также включает в себя указатель стека, который лучше всего указывает на уникальную область памяти для каждого потока, иначе они будут мешать друг другу.

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

Фактически значение Указателя инструкций и команды, хранящейся в этом месте, достаточно для определения нового значения для Указателя инструкций. Для большинства инструкций это просто увеличивает IP по размеру инструкции, но инструкции потока управления изменяют IP другими, предсказуемыми способами. Последовательность значений, которые принимает IP, формирует путь выполнения, пробивающийся через программный код, что приводит к названию "поток".

Ответ 2

Нить - это контекст выполнения, который представляет собой всю информацию, которую ЦП должен выполнять поток инструкций.

Предположим, что вы читаете книгу, и вы хотите сделать перерыв прямо сейчас, но вы хотите иметь возможность вернуться и возобновить чтение с того места, где вы остановились. Один из способов добиться этого - записать номер страницы, номер строки и номер слова. Таким образом, ваш контекст выполнения для чтения книги - это эти 3 номера.

Если у вас есть сосед по комнате, и она использует ту же технику, она может взять книгу, пока вы ее не используете, и возобновите чтение, откуда она остановилась. Затем вы можете забрать его и возобновить с того места, где вы были.

Потоки работают одинаково. CPU дает вам иллюзию, что он выполняет несколько вычислений одновременно. Он делает это, потратив немного времени на каждое вычисление. Он может это сделать, потому что у него есть контекст выполнения для каждого вычисления. Так же, как вы можете поделиться книгой со своим другом, многие задачи могут совместно использовать процессор.

На более техническом уровне контекст выполнения (поэтому поток) состоит из значений регистров CPU.

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

Уточнение: ресурсы, связанные с процессом, включают страницы памяти (все потоки в процессе имеют один и тот же вид памяти), дескрипторы файлов (например, открытые сокеты) и учетные данные безопасности (например, идентификатор пользователя кто начал этот процесс).

Ответ 3

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

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

Сравните это с процессами. Каждый процесс имеет свое собственное адресное пространство, то есть указатель в одном процессе не может использоваться для ссылки на объект в другом (если вы не используете разделяемую память).

Я думаю, что ключевые вещи для понимания:

  • Оба процесса и потоки могут "запускаться одновременно".
  • Процессы не обмениваются памятью (по умолчанию), но потоки совместно используют всю свою память с другими потоками в одном и том же процессе.
  • Каждый поток в процессе имеет свой собственный стек и собственный указатель инструкции.

Ответ 4

Чтобы формально определить поток, мы должны сначала понять границы того, где работает поток.

Компьютерная программа становится процессом, когда она загружается из некоторого хранилища в память компьютера и начинает выполнение. Процесс может выполняться процессором или набором процессоров. Описание процесса в памяти содержит важную информацию, такую ​​как счетчик программ, который отслеживает текущую позицию в программе (т.е. Какая команда выполняется в настоящий момент), регистры, хранилища переменных, файлы, сигналы и т.д.

A thread - это последовательность таких инструкций в программе, которая может выполняться независимо от другого кода. На рисунке показано понятие: введите описание изображения здесь

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

Некоторая информация не может быть реплицирована, например, стек (указатель стека на другую область памяти на поток), регистры и данные, зависящие от потока. Эта информация достаточна для того, чтобы потоки могли планироваться независимо основного потока программы и, возможно, одного или нескольких других потоков в программе.

Для запуска многопоточных программ требуется явная поддержка операционной системы. К счастью, большинство современных операционных систем поддерживают такие потоки, как Linux (через NPTL), варианты BSD, Mac OS X, Windows, Solaris, AIX, HP-UX и т.д. Операционные системы могут использовать различные механизмы для поддержки многопоточности.

Здесь, на графике, концепция представлена.

Здесь вы можете найти дополнительную информацию по этой теме. Это был также мой источник информации.

Ответ 5

Я собираюсь использовать много текста из книги "Концепции операционных систем" ABRAHAM SILBERSCHATZ, PETER BAER GALVIN и GREG GAGNE вместе с моим собственным пониманием вещей.

Процесс

Любое приложение находится на компьютере в виде текста (или кода).

Мы подчеркиваем, что сама программа не является процессом. Программа - это пассивный объект, такой как файл, содержащий список инструкций, хранящихся на диске (часто называемый исполняемым файлом).

Когда мы запускаем приложение, мы создаем экземпляр выполнения. Этот экземпляр исполнения называется процессом. EDIT: (Согласно моей интерпретации, аналогичной классу и экземпляру класса, экземпляр класса является процессом.)

Примером процессов является Google Chrome. Когда мы запускаем Google Chrome, генерируются 3 процесса:

• Процесс браузера отвечает за управление пользовательским интерфейсом как а также диск и сетевой ввод-вывод. Новый процесс браузера создается, когда Chrome запущен. Создается только один процесс браузера.

Процессы

Renderer содержат логику для рендеринга веб-страниц. Таким образом, они содержат логику обработки HTML, Javascript, изображений и т.д. Как правило, для каждого веб-сайта создается новый процесс визуализации открывается на новой вкладке, и поэтому могут быть задействованы несколько процессов рендеринга в то же время.

• Для каждого типа подключаемого модуля (например, Flash) создается плагин. или QuickTime). Процессы подключаемого модуля содержат код для плагин, а также дополнительный код, который позволяет подключаемому модулю взаимодействовать с связанными процессами визуализации и браузером процесс.

Тема

Чтобы ответить на это, я думаю, вы должны сначала знать, что такое процессор. Процессор - это аппаратное обеспечение, которое фактически выполняет вычисления. EDIT: (Вычисления, такие как добавление двух чисел, сортировка массива, в основном выполнение написанного кода)

Теперь перейдем к определению потока.

Нить - это базовая единица использования процессора; он содержит идентификатор потока, программу счетчик, набор регистров и стек.

EDIT: определение потока с сайта Intel:

A Thread или поток выполнения - это программный термин для базовой упорядоченной последовательности команд, которые могут быть переданы или обработаны одним ядром ЦП.

Итак, если процесс Renderer из приложения Chrome сортирует массив чисел, сортировка будет выполняться в потоке/потоке выполнения. (Грамматика относительно потоков кажется мне непонятной)

Мое толкование вещей

Процесс является экземпляром исполнения. Темы - это фактические работники, которые выполняют вычисления через доступ к ЦП. Когда для процесса выполняется несколько потоков, процесс обеспечивает общую память.

EDIT: Другая информация, которую я нашел полезной, чтобы предоставить больше контекста

Все современные компьютерные компьютеры имеют более одного потока. Количество потоков на компьютере зависит от количества ядер в компьютере.

Параллельные вычисления:

Из Википедии:

Параллельные вычисления - это форма вычислений, в которой несколько вычислений выполняются в течение перекрывающихся периодов времени - одновременно - вместо последовательно (один заканчивается перед очередными запусками). Это свойство системы - это может быть отдельная программа, компьютер или сеть, а имеется отдельная точка выполнения или "поток управления" для каждого вычисления ( "процесс" ).

Итак, я мог написать программу, которая вычисляет сумму из 4 чисел:

(1 + 3) + (4 + 5)

В программе для вычисления этой суммы (которая будет одним процессом, выполняющимся в потоке выполнения), я могу разблокировать другой процесс, который может запускаться в другом потоке для вычисления (4 + 5) и возвращать результат в исходный процесс, тогда как исходный процесс вычисляет сумму (1 + 3).

Ответ 6

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

http://en.wikipedia.org/wiki/Simultaneous_multithreading

http://www.intel.com/intelpress/samples/mcp_samplech01.pdf

Ответ 7

Это было взято из ответа Yahoo:

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

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

Однако, проще говоря, потоки похожи на разные "задачи". Поэтому подумайте, когда вы что-то делаете, например, вы пишете формулу на одной бумаге. Это можно рассматривать как один поток. Тогда еще один поток - вы пишете что-то еще на другом листе бумаги. Именно там происходит многозадачность.

У процессоров Intel, как говорят, есть "гиперпоточность" (у AMD тоже есть), и он должен иметь возможность выполнять несколько "потоков" или многозадачность намного лучше.

Я не уверен в логистике того, как обрабатывается поток. Я действительно помню, как слышал о процессоре, идущем туда и обратно между ними, но я не уверен на 100% об этом и, надеюсь, кто-то еще может ответить на это.

Ответ 8

Ответ сильно зависит от разных систем и разных реализаций, но наиболее важными являются:

  • В потоке есть независимый поток выполнения (т.е. вы можете отключить контекст от него, а затем вернуться, и он возобновит работу там, где он был).
  • В потоке есть время жизни (его можно создать другим потоком, а другой поток может дождаться завершения).
  • У него, вероятно, меньше багажа, чем "процесс".

Помимо этого: потоки могут быть реализованы в рамках одного процесса с помощью языковой среды выполнения, потоки могут быть сопрограммами, потоки могут быть реализованы в рамках одного процесса библиотекой потоков, или потоки могут быть конструкцией ядра.

В нескольких современных Unix-системах, в том числе в Linux, с которыми я больше всего знаком, все это потоки - процесс - это всего лишь тип потока, который разделяет относительно немного вещей со своим родителем (т.е. он получает свои собственные сопоставления памяти, собственную таблицу файлов и разрешения и т.д.) Чтение man 2 clone, особенно списка флагов, действительно поучительно здесь.

Ответ 9

Нить - это не что иное, как контекст памяти (или то, как Tanenbaum лучше его кладет, группирование ресурсов) с правилами выполнения. Это программная конструкция. CPU не знает, что такое поток (некоторые исключения здесь, некоторые процессоры имеют аппаратные потоки), он просто выполняет инструкции.

Ядро представляет концепцию потока и процесса для значительного управления порядком памяти и инструкций.

Ответ 10

Если вы хотите получить ответ на английском языке, то, что мой учитель сказал мне, когда я спросил его:

"Вы знаете, как при запуске java-программы он запускает программу сверху вниз? Ну, поток - это в основном способ обойти это. Как открытие сразу двух текстовых полей или запуск таймера на в то же время, как куча других вещей."

Я клянусь, что почти что он сказал.