примеры потока и процесса, чтобы показать разницу

0

Я прочитал много опубликованных ответов о различии между потоком и процессом в этой ссылке

В чем разница между процессом и потоком?

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

Любая помощь приветствуется.

Теги:
multithreading
process
multicore

2 ответа

1

Позвольте мне использовать аналогию здесь.

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

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

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

  • 0
    очень хорошая аналогия. Однако есть одна вещь, в которой я не уверен, в процессе синхронизации стоит дорого. В потоке будет легко, они совместно используют один и тот же ресурс и больше общаются, почему у них противоречивые ответы, у них могут быть тупики, потому что ресурсы не освобождаются или хранятся должным образом, они могут конфликтовать в распределении ресурсов, но я думаю, что их ответы должно быть таким же.
  • 0
    В чем вы не уверены?
Показать ещё 1 комментарий
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню