在我的.net多线程程序中,我想知道所有这些线程运行在同一进程上还是运行在不同的进程上?如果它在同一进程上,那么我假设一个进程在一个核心上运行,那么多线程如何利用我的四核cpu中的所有四个核心呢?但是如果是在不同的进程上,因为我知道不同的进程和相同的进程有不同的数据共享机制,那么为什么我不需要在我的多线程程序中编写不同的代码来处理这个问题呢?有没有人能解释一下
我想再问两个类似的问题
当我打开任务管理器时,我经常可以看到大约800个线程和54个进程,而我的cpu使用率只有5%,并且我被告知每个内核一次只能执行一个线程。我的cpu是否一直在运行这800个线程,或者仅仅意味着有800个线程在排队,等待cpu处理?如果我想要我的多线程程序充分利用我的四核cpu,我可以通过创建更多的线程来提高cpu使用率吗(这似乎与一次只能有一个线程一个内核的理论相矛盾)
发布于 2012-03-21 19:45:55
多线程意味着同一进程中的多个线程。
可以将每个线程分配到不同的核心。
但所有线程都属于同一进程,例如,如果其中一个线程将抛出未处理的异常,则该进程将与其所有线程一起崩溃。
你可能已经读过一些,只需搜索谷歌或
发布于 2012-03-21 19:46:11
单个进程可能使用多个线程;即使是基本的.NET "hello world“控制台exe也可能使用4或5个线程。因此,是的,如果您编写,那么单个进程可能会使用所有可用的内核。
因为这是相同的过程,所以数据共享是直接的,但是:如果您正在更改值,则必须小心,否则可能会发生非常糟糕的事情。如果您要更改线程代码中的数据,则必须仔细同步Access (lock等)。
然而,do通常需要编写不同的代码来支持多线程。例外的是当框架为你做时,例如,ASP.NET或WCF可能会接受传入的请求并将它们传递给不同的工作线程,从而允许多个并发操作,即使你没有明确地以这种方式编码。这意味着在ASP.NET或WCF中,您需要小心使用共享状态,这正是前面讨论过的原因。
作为一个次要的补充,还要注意,一个进程可以支持多个AppDomain;在该场景中,调度器可以在所有AppDomain之间随意共享该进程的线程。
发布于 2012-03-21 19:45:29
由该进程创建的线程是该进程的一部分。一个进程中的不同线程可以并且经常在不同的处理器或处理器核心上运行。
https://stackoverflow.com/questions/9803933
复制相似问题