it-roy-ru.com

Что такое «нить» (на самом деле)?

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

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

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

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

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

От Википедия :

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

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

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

201
richard

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

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

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

130
Ben Voigt

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

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

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

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

На техническом уровне контекст выполнения (следовательно, поток) состоит из значений регистров ЦП.

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

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

171
pwnall

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

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

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

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

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

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

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

Поток - это последовательность таких инструкций в программе, которая может выполняться независимо от другого кода. На рисунке показана концепция: enter image description here

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

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

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

Here, graphically, the concept is rapresented.

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

36
Leos313

Я собираюсь использовать много текста из книги "Концепции операционных систем" Абрахама Силберша, Питера Баера Галвина и Грега Гагна, а также свое собственное понимание вещей.

процесс

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

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

Когда мы запускаем приложение, мы создаем экземпляр выполнения. Этот экземпляр выполнения называется процессом. РЕДАКТИРОВАТЬ: (Согласно моей интерпретации, аналог класса и экземпляра класса, экземпляр класса является процессом.)

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

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

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

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

Thread

Чтобы ответить на этот вопрос, я думаю, вы должны сначала знать, что такое процессор. Процессор - это аппаратная часть, которая фактически выполняет вычисления. РЕДАКТИРОВАТЬ: (Вычисления, такие как добавление двух чисел, сортировка массива, в основном выполнение кода, который был написан)

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

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

Правка: определение потока с веб-сайта Intel:

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

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

Моя интерпретация вещей

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

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

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

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

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

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

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

(1 + 3) + (4 + 5)

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

24
chatuur

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

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

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

5
Orbit

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

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

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

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

4
hobbs

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

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

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

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

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

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

3
Flipper

Поток - это не что иное, как контекст памяти (или, как лучше выразился Таненбаум, группировка ресурсов) с правилами выполнения. Это программная конструкция. Процессор не знает, что такое поток (за некоторыми исключениями, некоторые процессоры имеют аппаратные потоки), он просто выполняет инструкции.

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

2
Valentin Radu

Thread

здесь простая идея о потоке

  • Поток - это отдельный поток последовательности внутри процесса
  • Проще говоря, нить - это легкий процесс
  • Каждый поток владеет счетчиком программ, стеком, набором регистров и идентификатором потока.
  • Каждый поток принадлежит ровно одному процессу, и ни один поток не может существовать вне процесса
  • Традиционные тяжеловесные процессы имеют единый поток управления - один программный счетчик и одну последовательность команд, которые можно выполнять в любой момент времени - однопоточный процесс
  • Многопоточные приложения имеют несколько потоков внутри одного процесса, каждый из которых имеет свой собственный программный счетчик, стек и набор регистров, но совместно использует общий код, данные и определенные структуры, такие как открытые файлы - Многопоточный процесс
0
Malith Ileperuma