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



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



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



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



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



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



с Википедия:




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




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



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

688   12  

12 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

компьютерная программа становится

Я собираюсь использовать много текста из книги "концепции операционных систем" Абрахама ЗИЛЬБЕРШАЦА, Питера Бэра ГАЛВИНА и Грега Ганье вместе с моим собственным пониманием вещей.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

позвольте мне сначала объяснить разницу между процессом и потоками.

процесс может иметь {1..N} количество потоков. Небольшое объяснение по виртуальной памяти и виртуальному процессору.

виртуальный

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

виртуальный процессор

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

ОС позаботится о выделении виртуальной памяти и виртуального процессора для процесса и выполнения обмена между процессами и выполнения выполнения.

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

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

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

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

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

Comments

    Ничего не найдено.