Я пытался найти хорошее определение и понять, что такое поток .
Кажется, что я, должно быть, упускаю что-то очевидное, но каждый раз, когда я читаю о том, что такое поток, это почти круговое определение, а именно «поток - это поток выполнения» или «способ делиться на выполняемые задачи». Э-э-э А?
Из того, что я прочитал, кажется, что поток не является чем-то конкретным, как процесс. На самом деле это просто концепция. Из того, что я понимаю пути это работает, процессор выполняет некоторые команды для программы (которая была названа в поток исполнения ), а затем , когда он должен переключиться на обработку для какой - либо другой программы для немного, он сохраняет состояние в программа, которую она в данный момент выполняет для чего-то (Thread Local Storage), а затем начинает выполнять инструкции другой программы. И туда и обратно. Таким образом, поток на самом деле является просто концепцией «одного из путей выполнения» программы, которая в данный момент выполняется.
В отличие от процесса, который действительно является чем-то - это скопление ресурсов и т. Д.
Как пример определения, которое не очень мне помогло. , ,
Из Википедии :
«Поток в информатике - это сокращение от потока выполнения. Потоки - это способ для программы разделить (называемый« разделить ») себя на две или более одновременно (или псевдо-одновременно) выполняющихся задач. Потоки и процессы отличаются от одной. операционной системы в другую, но, как правило, поток содержится внутри процесса, и разные потоки в одном и том же процессе совместно используют одни и те же ресурсы, а разные процессы в одной и той же многозадачной операционной системе - нет ».
Так я прав? Неправильно? Что это за нить на самом деле?
Изменить: Видимо поток также получает свой собственный стек вызовов, так что несколько из конкретной вещи .
источник
Ответы:
Поток - это независимый набор значений для регистров процессора (для одного ядра). Поскольку он включает указатель инструкций (он же счетчик программ), он контролирует, что и в каком порядке выполняется. Он также включает указатель стека, который лучше указывает на уникальную область памяти для каждого потока, иначе они будут мешать друг другу.
Потоки - это программный модуль, на который влияет поток управления (вызов функции, цикл, переход), поскольку эти инструкции работают с указателем инструкций и принадлежат конкретному потоку. Потоки часто планируются в соответствии с какой-то схемой расстановки приоритетов (хотя можно спроектировать систему с одним потоком на ядро процессора, в этом случае каждый поток всегда работает и не требует планирования).
На самом деле значение указателя инструкций и команды, хранящейся в этом месте, достаточно для определения нового значения указателя инструкций. Для большинства инструкций это просто увеличивает IP на размер инструкции, но инструкции потока управления изменяют IP другими, предсказуемыми способами. Последовательность значений, которые принимает IP, образует путь исполнения, прокалывающий программный код, порождая имя «поток».
источник
Поток - это контекст выполнения, представляющий собой всю информацию, необходимую ЦП для выполнения потока инструкций.
Предположим, вы читаете книгу и хотите сделать перерыв прямо сейчас, но вы хотите иметь возможность вернуться и возобновить чтение с того места, где вы остановились. Один из способов добиться этого - записать номер страницы, номер строки и номер слова. Таким образом, ваш контекст исполнения для чтения книги - это эти 3 числа.
Если у вас есть соседка по комнате, и она использует ту же технику, она может взять книгу, пока вы ее не используете, и возобновить чтение с того места, где она остановилась. Затем вы можете забрать его и возобновить с того места, где вы были.
Темы работают так же. Процессор дает вам иллюзию, что он выполняет несколько вычислений одновременно. Это достигается за счет тратить немного времени на каждое вычисление. Он может сделать это, потому что имеет контекст выполнения для каждого вычисления. Точно так же, как вы можете поделиться книгой со своим другом, многие задачи могут совместно использовать процессор.
На техническом уровне контекст выполнения (следовательно, поток) состоит из значений регистров ЦП.
Последнее: потоки отличаются от процессов. Поток - это контекст выполнения, а процесс - это набор ресурсов, связанных с вычислением. Процесс может иметь один или несколько потоков.
Пояснение: ресурсы, связанные с процессом, включают в себя страницы памяти (все потоки в процессе имеют одинаковое представление о памяти), файловые дескрипторы (например, открытые сокеты) и учетные данные безопасности (например, идентификатор пользователя, который запустил обработать).
источник
Чтобы определить поток формально, мы должны сначала понять границы того, где работает поток.
Компьютерная программа становится процессом, когда она загружается из какого-либо хранилища в память компьютера и начинает выполнение. Процесс может быть выполнен процессором или набором процессоров. Описание процесса в памяти содержит важную информацию, такую как счетчик программы, который отслеживает текущую позицию в программе (то есть, какая инструкция выполняется в данный момент), регистры, хранилища переменных, файловые дескрипторы, сигналы и так далее.
Поток представляет собой последовательность таких инструкций в рамках программы , которая может быть выполнена независимо от другого кода. На рисунке показана концепция:
Потоки находятся в одном и том же адресном пространстве процесса , таким образом, большая часть информации, представленной в описании памяти процесса, может быть разделена между потоками.
Некоторая информация не может быть реплицирована, например, стек (указатель стека на другую область памяти на поток), регистры и данные, специфичные для потока. Этой информации достаточно для планирования потоков независимо от основного потока программы и, возможно, одного или нескольких других потоков в программе.
Явная поддержка операционной системы требуется для запуска многопоточных программ. К счастью, большинство современных операционных систем поддерживают потоки, такие как Linux (через NPTL), варианты BSD, Mac OS X, Windows, Solaris, AIX, HP-UX и т. Д. Операционные системы могут использовать различные механизмы для реализации поддержки многопоточности.
Здесь вы можете найти больше информации по теме. Это был также мой источник информации.
Позвольте мне добавить предложение из « Введения в встроенную систему » Эдварда Ли и Сешии :
источник
Процессы похожи на двух людей, использующих два разных компьютера, которые используют сеть для обмена данными, когда это необходимо. Потоки похожи на двух людей, использующих один и тот же компьютер, которым не нужно явно обмениваться данными, но они должны тщательно по очереди.
Концептуально потоки - это просто несколько рабочих пчел, гудящих в одном и том же адресном пространстве. Каждый поток имеет свой собственный стек, свой собственный счетчик программ и т. Д., Но все потоки в процессе совместно используют одну и ту же память. Представьте две программы, работающие одновременно, но обе они могут обращаться к одним и тем же объектам.
Сравните это с процессами. Каждый процесс имеет свое собственное адресное пространство, то есть указатель в одном процессе не может быть использован для ссылки на объект в другом (если вы не используете общую память).
Я думаю, что ключевые вещи, чтобы понять это:
источник
Я собираюсь использовать много текста из книги «Концепции операционных систем» Абрахама Силберша, Питера Баера Галвина и Грега Гагна, а также мое собственное понимание вещей.
Обработать
Любое приложение находится на компьютере в виде текста (или кода).
Когда мы запускаем приложение, мы создаем экземпляр выполнения. Этот экземпляр выполнения называется процессом. РЕДАКТИРОВАТЬ: (Согласно моей интерпретации, аналог класса и экземпляра класса, экземпляр класса является процессом.)
Примером процессов является Google Chrome. Когда мы запускаем Google Chrome, появляются 3 процесса:
Нить
Чтобы ответить на этот вопрос, я думаю, вы должны сначала знать, что такое процессор. Процессор - это аппаратная часть, которая фактически выполняет вычисления. РЕДАКТИРОВАТЬ: (Вычисления, такие как добавление двух чисел, сортировка массива, в основном выполнение кода, который был написан)
Теперь перейдем к определению потока.
РЕДАКТИРОВАТЬ: определение потока с веб-сайта Intel:
Таким образом, если процесс Renderer из приложения Chrome сортирует массив чисел, сортировка будет выполняться в потоке / потоке выполнения. (Грамматика, относящаяся к темам, меня смущает)
Моя интерпретация вещей
Процесс - это экземпляр исполнения. Потоки - это фактические рабочие, которые выполняют вычисления через доступ к процессору. Когда для процесса запущено несколько потоков, процесс предоставляет общую память.
РЕДАКТИРОВАТЬ: Другая информация, которую я нашел полезным, чтобы дать больше контекста
Все современные дневные компьютеры имеют более одного потока. Количество потоков в компьютере зависит от количества ядер в компьютере.
Параллельное Computing :
Из Википедии:
Итак, я мог бы написать программу, которая рассчитывает сумму из 4 чисел:
В программе для вычисления этой суммы (это будет один процесс, выполняющийся в потоке выполнения), я могу разветвить другой процесс, который может выполняться в другом потоке, для вычисления (4 + 5) и вернуть результат в исходный процесс, в то время как Исходный процесс вычисляет сумму (1 + 3).
источник
К сожалению, потоки существуют. Нить - это нечто материальное. Вы можете убить одного, а другие все еще будут работать. Вы можете создавать новые потоки .... хотя каждый поток не является его собственным процессом, они запускаются отдельно внутри процесса. На многоядерных компьютерах 2 потока могут работать одновременно.
http://en.wikipedia.org/wiki/Simultaneous_multithreading
http://www.intel.com/intelpress/samples/mcp_samplech01.pdf
источник
Поток - это не что иное, как контекст памяти (или, как лучше выразился Таненбаум, группировка ресурсов) с правилами выполнения. Это программная конструкция. Процессор понятия не имеет, что такое поток (за некоторыми исключениями, у некоторых процессоров есть аппаратные потоки), он просто выполняет инструкции.
Ядро вводит концепцию потоков и процессов для управления памятью и порядком инструкций осмысленным образом.
источник
Это было взято из Yahoo Ответ:
Однако, если говорить проще, потоки - это разные «задачи». Так что подумайте, когда вы что-то делаете, например, вы пишете формулу на одном листе. Это можно считать одной нитью. Тогда другой поток - вы пишете что-то еще на другом листе бумаги. Вот тут и приходит многозадачность.
Говорят, что процессоры Intel имеют «гиперпоточность» (она есть и у AMD), и предполагается, что она способна выполнять несколько «потоков» или многозадачность намного лучше.
Я не уверен в логистике того, как обрабатывается нить. Я помню, что слышал о процессоре, идущем туда-сюда между ними, но я не уверен на 100% в этом, и, надеюсь, кто-то другой сможет ответить на этот вопрос.
источник
Ответ варьируется в очень разных системах и различных реализаций, но наиболее важные части:
Кроме того: потоки могут быть реализованы в одном процессе с помощью среды выполнения языка, потоки могут быть сопрограммами, потоки могут быть реализованы в одном процессе с помощью библиотеки потоков или потоки могут быть структурой ядра.
В нескольких современных системах Unix, включая Linux, с которым я больше всего знаком, все потоки - процесс - это просто тип потока, который относительно мало разделяет свой родительский объект (т.е. он получает свои собственные отображения памяти, свою собственную таблицу файлов). и разрешения, и т. д.) Чтение
man 2 clone
, особенно список флагов, здесь действительно поучительно.источник
Я не очень доволен ни одним из этих ответов, поэтому я собираюсь добавить свой собственный здесь :) Поток - это абстракция ядра для планирования работы над процессором, поток - это то, что ядро дает вам для управления временем процессора и делиться работой с другими
источник
Позвольте мне сначала объяснить разницу между процессом и потоками.
Процесс может иметь количество потоков {1..N}. Небольшое объяснение виртуальной памяти и виртуального процессора.
Виртуальная память
Используется как пространство подкачки, так что процесс считает, что он находится в основной памяти для выполнения.
Виртуальный процессор
Та же концепция, что и для виртуальной памяти, но только для процессора. Для процесса, это будет выглядеть, это единственное, что использует процессор.
ОС позаботится о выделении виртуальной памяти и виртуального процессора для процесса и выполнении обмена между процессами и выполнением.
Все потоки внутри процесса будут использовать одну и ту же виртуальную память. Но каждому потоку будет присвоен отдельный виртуальный процессор, чтобы они могли выполняться по отдельности.
Таким образом, сохраняя память, а также используя процессор в его потенциал.
источник