Поток и процесс - PullRequest
       13

Поток и процесс

4 голосов
/ 05 декабря 2008

Какое определение потока и что такое процесс? Если я вызываю функцию, как мне узнать, что ее вызывает поток или процесс (или я не понимаю ?? Это в многоядерной системе (quadcore).

Ответы [ 5 ]

6 голосов
/ 05 декабря 2008

С http://wiki.answers.com/Q/What_is_the_difference_between_a_computer_process_and_thread:

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

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

4 голосов
/ 05 декабря 2008

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

Ядро в ЦП может одновременно выполнять только один поток. Поэтому, если этот поток заблокирован из-за того, что программа ожидает завершения операции ввода-вывода, процесс блокируется (очень упрощенный пример: Word не отвечает). Многопоточность позволяет нам выполнять несколько путей кода одновременно. «Одно и то же время» - это ложь, поскольку на самом деле в ядре может одновременно выполняться только один поток, но центральный процессор отдает немного времени каждому потоку, поэтому создается впечатление, что все эти потоки выполняются на в то же время. Хорошим примером здесь является проверка орфографии в Word.

Если у вас несколько ядер, единственное отличие состоит в том, что в процессоре N-Core вы можете одновременно выполнять N потоков. Чтобы упростить многое, не имеет значения, к какому процессу относятся потоки. Проще говоря, можно ожидать увеличения производительности в N раз. : -D

2 голосов
/ 05 декабря 2008

В каждой современной операционной системе, о которой я знаю, все работает в потоке, который выполняется в процессе. ОС может отслеживать несколько процессов, и каждый процесс может содержать произвольное количество потоков. Таким образом, весь код выполняется в потоке и внутри процесса (поскольку поток выполняется в процессе).

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

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

Часто (но не всегда) бывает, что одна программа состоит из одного процесса и нескольких потоков.

1 голос
/ 05 декабря 2008

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

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

Это намного больше, особенно если вы человек из ОС.

1 голос
/ 05 декабря 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...