"finalize" 在 Julia 中是什么意思?
What does it mean to "finalize" in Julia?
我目前正在使用 CUDArt 包。 GitHub documentation 在加载包含自定义 CUDA C 内核的 ptx 模块时包含以下代码片段:
md = CuModule("mycudamodule.ptx", false) # false means it will not be automatically finalized
(原评论)
我想了解这个 false
最终确定选项的确切含义以及我何时/不想使用它。我在 SO (What is the right way to write a module finalize method in Julia?) 上遇到了这个 post。它从 Julia 文档中引用为:
finalizer(x, function)
Register a function f(x) to be called when there are no program-accessible references to x. The behavior of this function is unpredictable if x is of a bits type.
虽然我不太明白这是什么意思,甚至不知道这里的定型是否与 CUDArt 示例中提到的相同。例如,当程序无法访问该参数时,尝试在参数 x
上调用函数对我来说没有意义——这怎么可能呢?因此,我将不胜感激任何澄清方面的帮助:
- Julia 中 "finalize" 和
的含义
- 当我 would/would 不想在使用 CUDArt 导入 .ptx 模块的上下文中使用它时
我不能代表 CUDArt,但这是 finalize
在 Julia 中的意思:当垃圾收集器检测到 程序 无法再访问该对象时,然后它将 运行 终结器,然后收集(释放)对象。请注意,垃圾收集器仍然可以访问对象,即使程序不能。
这是一个例子:
julia> type X
a
end
julia> j = X(1) # create new X(1) object, accessible as j
julia> finalizer(j, println) # print the object when it's finalized
julia> gc() # suggest garbage collection; nothing happens
julia> j = 0 # now the original object is no longer accessible by the program
julia> gc() # suggest carbage collection
X(1) # object was collected... and finalizer was run
这很有用,可以在收集对象时释放外部资源(例如文件句柄或 malloc
ed 内存)。
我无法发表评论,但我想补充一下 docs:
finalizer(f, x)
f
must not cause a task switch, which excludes most I/O operations such as println. Using the @async
macro (to defer context switching to outside of the finalizer) or ccall to directly invoke IO functions in C may be helpful for debugging purposes.
我目前正在使用 CUDArt 包。 GitHub documentation 在加载包含自定义 CUDA C 内核的 ptx 模块时包含以下代码片段:
md = CuModule("mycudamodule.ptx", false) # false means it will not be automatically finalized
(原评论)
我想了解这个 false
最终确定选项的确切含义以及我何时/不想使用它。我在 SO (What is the right way to write a module finalize method in Julia?) 上遇到了这个 post。它从 Julia 文档中引用为:
finalizer(x, function)
Register a function f(x) to be called when there are no program-accessible references to x. The behavior of this function is unpredictable if x is of a bits type.
虽然我不太明白这是什么意思,甚至不知道这里的定型是否与 CUDArt 示例中提到的相同。例如,当程序无法访问该参数时,尝试在参数 x
上调用函数对我来说没有意义——这怎么可能呢?因此,我将不胜感激任何澄清方面的帮助:
- Julia 中 "finalize" 和 的含义
- 当我 would/would 不想在使用 CUDArt 导入 .ptx 模块的上下文中使用它时
我不能代表 CUDArt,但这是 finalize
在 Julia 中的意思:当垃圾收集器检测到 程序 无法再访问该对象时,然后它将 运行 终结器,然后收集(释放)对象。请注意,垃圾收集器仍然可以访问对象,即使程序不能。
这是一个例子:
julia> type X
a
end
julia> j = X(1) # create new X(1) object, accessible as j
julia> finalizer(j, println) # print the object when it's finalized
julia> gc() # suggest garbage collection; nothing happens
julia> j = 0 # now the original object is no longer accessible by the program
julia> gc() # suggest carbage collection
X(1) # object was collected... and finalizer was run
这很有用,可以在收集对象时释放外部资源(例如文件句柄或 malloc
ed 内存)。
我无法发表评论,但我想补充一下 docs:
finalizer(f, x)
f
must not cause a task switch, which excludes most I/O operations such as println. Using the@async
macro (to defer context switching to outside of the finalizer) or ccall to directly invoke IO functions in C may be helpful for debugging purposes.