2009-07-08 2 views
7

Я всегда смущен концепциями потоков. Пока у меня нет возможности использовать их в реальной среде. Было бы полезно, если бы кто-то мог объяснить темы для меня.Что такое Threads (What is Thread)?

+1

Этот вопрос слишком широк для ответа. Кроме того, если вам не нужно использовать потоки, то нет. Слишком легко сделать неправильную вещь. –

+4

Это, кажется, совершенно законный вопрос для меня, который может помочь многим людям. –

+0

@JohnSaunders Это совершенно законный вопрос. Не каждый вопрос по SA должен вникать в неясные, эзотерические глубины ИТ и программирования. Стах это. – Seph

ответ

7

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

Этот единственный человек похож на нить в компьютере.

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

Чтобы ускорить работу, вы можете добавить больше людей на ту же работу. Например, скажем, вам нужно нарисовать дом. Вы нанимаете 4 человека, чтобы сделать это.

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

Процесс будет сродни работе по покраске этого дома.

Это простое объяснение несколько ломается, когда дело доходит до машин, на которых не хватает процессорных ядер для одновременного запуска всех потоков, но я проигнорирую это здесь.

+0

Простой и понятный. –

0

Существует хорошая страница на википедии: http://en.wikipedia.org/wiki/Thread_%28computer_science%29

Краткое резюме: Поток представляет собой легкий процесс

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

2

Индивидуальный поток назван так потому, что это один поток выполнения через ваш код. Если у вас несколько потоков, то у вас есть несколько потоков выполнения через ваш код одновременно (или одновременно с поддержкой вашей единой/многоядерной системы). Оба потока имеют доступ к одной и той же куче, хотя используют разные стеки. Это означает, что данные в вашей программе могут быть видны обоими потоками и могут быть изменены либо потоком. Это, конечно же, может привести к серьезным проблемам, требующим защиты.

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

Для более полного описания см другого онлайна описания

wikipedia

2

Рискуя упрощение:

Потока представляет собой линию исполнения в рамках программы.

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

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

7

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

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

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

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

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

Смежные вопросы