Процесс против экземпляра против пространства выполнения в PowerShell - PullRequest
0 голосов
/ 03 февраля 2019

метод [Powershell]::create() - создает новый PowerShell - " Instance " либо в "текущем, либо в новом пространстве выполнения".

Может ли кто-нибудь объяснить, как термины process , instance , runspace и (возможно thread ) связаны друг с другомв этой связи.С точки зрения мирян, если это возможно?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы можете думать о [Powershell] :: Create () как о новом сеансе powershell в отдельном потоке.В этом сеансе будет создано некоторое пространство по умолчанию, но вы можете изменить его на другое.В отличие от Start-Process (отдельный процесс) и Start-Job (дочерний процесс), [Powershell] :: Create () выполняется в одном процессе с основным сценарием и совместно использует пространство памяти.Это означает, что вы можете обмениваться фактическими объектами .net между основным и дочерним сеансами.Если сеансы выполняются в отдельных процессах, они могут обмениваться только с текстовыми / сериализованными данными.

0 голосов
/ 03 февраля 2019

Условия, которые у вас есть, не являются взаимозаменяемыми и не означают одно и то же.

Процесс - это программа, которая запускает набор инструкций.

Поток - это один запуск инструкций в программе.

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

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

Экземпляр является изолированнымзапуск кода.Это дескриптор.

Итак, вот несколько примеров

Я могу получить экземпляр процесса.Я могу иметь экземпляр потока.Я могу иметь экземпляр Runspance.

Редактирование для расширения на Ответ на основе комментария

"Так, в приведенном выше примере ([Powershell] :: create ()), это экземпляр потока,процесс или пространство выполнения? "

Итак, у нас есть приложение Powershell.Происходит следующее: это приложение запускает Runspace, где будут выполняться ваши команды, и устанавливает местоположение для создания объектов Powershell.Каждый раз, когда вы открываете консоль PowerShell, вы запускаете другое пространство выполнения.

[Powershell]::create() создает объект, где вы можете определить, что будет запускаться и в каком пространстве выполнения он будет запускаться.Если вы не выберете пространство выполнения, то оно создаст его для вас.

Итак, [Powershell] - это Что будет работать? (The Script) и Где оно будет работать (A Runspace)

Runspace - это Как он будет работать? (На PowerShell Engine)

...