С концептуального уровня вы можете рассматривать процессы и потоки очень аналогично. Основное отличие состоит в том, что обычно потоки будут иметь доступ только к памяти, содержащейся в процессе, который породил ее, а процессы упрощают уничтожение набора потоков. Поэтому, когда операционная система порождает несколько процессов, процесс генерирует несколько потоков. Я уверен, что кто-то может разобрать эти два заявления, но я считаю их правдивыми на поверхности, по крайней мере.
Я должен начать с ответа на ваш третий вопрос, чтобы дать вам лучший контекст для ваших других вопросов. Темы и процессы начинаются в состоянии RUNNABLE
, что означает, что он может быть выбран планировщиком потоков/процессов в качестве следующего потока/процесса, который должен выполняться на заданном ядре. После того, как он был выбран, он загружается в контекст этого ядра и входит в состояние RUNNING
. Это продолжается до тех пор, пока поток/процесс не завершит свою работу и не умрет, или он не будет ждать состояния. Это ожидание помещает его в состояние BLOCKED
. После того, как это условие отменено, оно входит в состояние RUNNABLE
(даже если это условие становится истинным позже!)
Для вашего первого вопроса вы можете создавать столько процессов и потоков, сколько у вас есть системные ресурсы, но только для каждого виртуального ядро будет RUNNING
в любой момент времени. (Это процесс выбора, описанный выше.) Обратите внимание, что когда я говорю о виртуальном ядре, я имею в виду то, что операционная система сообщает в качестве ядра. Передовые технологии позволяют нам помещать то, что кажется несколько ядер на одном ядре. Таким образом, у вас может быть 4-ядерная система с двойной гиперпотокой, которая сообщит о 8 ядрах операционной системе. Это абстракция, которой мы, как правило, не занимаемся, - мы просто заботимся о том, сколько ядер операционная система говорит, что у нас есть, и с этим.
Для вашего второго вопроса параллелизм возможен с обоими, но вам нужно будет управлять своей памятью иначе. Процессы часто используют файловую систему или базу данных для обмена своей памятью (хотя межпроцессное общение возможно, на мой взгляд это сложнее). Потоки имеют преимущество общего пространства памяти, но это также означает, что они должны находиться в одной системе - с базой данных, доступной с разных компьютеров, вы можете распараллелить процессы на разных машинах.
1) Процесс представляет собой набор из одного или нескольких потоков. Для четырехъядерного ядра одновременно могут выполняться только 4 потока, не имеет значения, к какому процессу они принадлежат. –