gpt4 book ai didi

c# - C#有没有多处理的概念(除了多线程)?

转载 作者:行者123 更新时间:2023-12-05 04:27:11 24 4
gpt4 key购买 nike

我来自 python 编程背景。在 python 中,解释器在一个进程中运行。建议对 IO 操作(文件 io、http 请求等)使用多线程,而对 CPU 密集型操作(计算)建议使用多线程。

多线程意味着在进程中创建多个线程。多处理意味着为每个任务创建一个新进程(解释器)。

我了解到C#还有async/await、Task.Run和Task Parallel库的概念。看起来这些都是多线程(即 - 在同一进程中运行的线程)。那么C#没有多处理吗? C# 中 IO 与 CPU 绑定(bind)工作的概念/方法是什么?

最佳答案

两种语言都是图灵完备的,所以原则上,任何一种语言能做的事,另一种语言也能做!

一个不太老套的答案是,不,通常不会求助于 C# 中的多处理。由于全局解释器锁,添加了 Python 中的多处理;与其摆脱那个锁的解释器并在单个 Python 进程中促进适当的多线程,更容易(当时 - Python 当时是一个小得多的社区,更少的志愿者等;重要的考虑因素)实现多处理和以更少的工作量获得接近相同类型的结果。就我而言,最终结果实际上非常好,比传统上仅使用线程的模型更接近 Actor 模型。 [我说“关闭”是因为,在 Actor 模型中,一个通常会认为另一个 Actor 已经存在,而不是您动态启动的东西。]

C# 也有一个运行时解释器(JIT 编译器),但它没有像全局解释器锁这样的结构。因此,此运行时可以将操作系统线程用于 C# 线程。所以它没有内置的 Actor 模型样式的多处理类/库,但你可以编写自己的。与许多其他同类语言一样,它有一个用于某些操作的线程池。

.NET C# Task Parallel 库(及其 DataFlow 库)可以执行 Actor 模型,因此它“感觉”很像 Python 的多处理,但它不会为此产生单独的进程。

关于c# - C#有没有多处理的概念(除了多线程)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72892401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com