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