【发布时间】:2019-02-03 13:12:20
【问题描述】:
[Powershell]::create() - 方法在“当前或新运行空间”中创建一个新的 PowerShell-“Instance”。
谁能解释一下process、instance、runspace和(可能是thread)这三个术语之间的关系其他在这方面。 如果可能的话,通俗地说?
【问题讨论】:
标签: .net powershell process instance runspace
[Powershell]::create() - 方法在“当前或新运行空间”中创建一个新的 PowerShell-“Instance”。
谁能解释一下process、instance、runspace和(可能是thread)这三个术语之间的关系其他在这方面。 如果可能的话,通俗地说?
【问题讨论】:
标签: .net powershell process instance runspace
您可以将 [Powershell]::Create() 视为单独线程上的新 powershell 会话。此会话将创建一些默认运行空间,但您可以将其更改为另一个。与 Start-Process(单独的进程)和 Start-Job(子进程)不同,[Powershell]::Create() 与您的主脚本在同一个进程上运行并与其共享内存空间。这意味着您可以在主会话和子会话之间交换实际的 .net 对象。如果会话在单独的进程上运行,它们只能与文本/序列化数据交换。
【讨论】:
您拥有的术语不可互换,并且不做同样的事情。
进程是运行指令集的程序。
线程是程序中单条指令的运行。
多线程是指同时运行多条指令。每个都需要一个单独的线程。
Runspace 在同一个 powershell 进程中,但调用了一个新的 powershell 引擎,以便在不干扰当前 powershell 脚本线程的情况下运行其代码。
实例是包含运行的代码。它是一个描述符。
所以这里有一些例子
我可以有一个进程的实例。 我可以有一个线程的实例。 我可以有一个 Runspance 的实例。
编辑以根据评论扩展答案
“那么在我上面发布的示例中([Powershell]::create()),它是线程、进程还是运行空间的实例?”
所以我们有一个 Powershell 应用程序。正在发生的事情是这个应用程序启动了一个运行空间,您的命令将在其中执行并设置一个位置来创建 Powershell 对象。每次打开 powershell 控制台时,您都在启动另一个运行空间。
[Powershell]::create() 它创建一个对象,您可以在其中确定将运行什么以及它将在哪个运行空间上运行。如果您不选择运行空间,那么它会为您创建一个。
所以 [Powershell] 是 What will run?(脚本)和 它将在哪里运行(运行空间)
运行空间是 它将如何运行?(在 powershell 引擎上)
【讨论】: