进程,线程和ThreadPool

时间:2013-10-16 16:04:31

标签: c# multithreading process threadpool

我正在研究一个MultiThreading c#教程,我还没有完全理解有关进程和线程的整个图片。我已经明白线程在这个过程中,但不清楚什么是一个过程?是类的实例,特定方法和整个程序集文件,它是什么? 当我看到Lock和Mutex之间的区别时,这个疑问就出现了。 Mutex类的定义是......“一个同步原语,也可以用于进程间同步......”以及后来.... Mutex是一个同步原语,它只允许对一个线程的共享资源进行独占访问,这让我有点困惑?我错误的是说Mutex会同步来自不同进程的线程吗?

关于ThreadPool,定义是......“线程池是一组线程,可用于在后台执行多个任务....”这个线程集合来自不同进程的相同进程或线程?

3 个答案:

答案 0 :(得分:9)

  • 进程是AppDomain的集合。 99%的程序只有1个AppDomain
  • AppDomain是一组线程和static variables
  • 线程是执行一系列指令(您的代码)的东西,您可能在AppDomain中同时运行多个指令系列(多个线程)
  • ThreadPool只是一个短期任务的线程集合,它们在完成后会被回收而不是被“删除”,因为它对系统资源的负担较少。
  • Mutex用于确保两个线程(来自任何进程)不会同时使用共享资源,如果该资源未被编程为处理同时访问它的多个线程。这可以通过等待另一个人完成然后继续(这称为阻止)或者根本不执行操作来实现。
  • 锁定就像一个“简单的互斥锁”,它只会执行“等到另一个人完成”的方法。它更易于使用,但仅适用于单个AppDomain,因此它不提供跨AppDomain或跨进程保护。

最后,不是直接问,而是:

  • 程序集是捆绑在单个文件中的代码集合,该单个文件可以包含运行多个AppDomain的代码,或者具有多个文件(想想dll和单个exe),这些代码都运行在单个AppDomain中。程序集和线程/ AppDomains /进程之间没有任何关系(在AppDomains和程序集之间there is a relationship,这就是它处理单独的静态变量的方式。但是,对于你关心的一切,没有关系)。

答案 1 :(得分:1)

进程是程序的内存实例。如果您多次运行记事本,您将在任务管理器下的进程中看到Notepad.exe的多个实例。

线程是一系列指令。对于单个进程,可以并行执行多个线程。例如,在MS Word中,不同的线程可以负责拼写/语法检查,自动保存,...以及处理UI。

答案 2 :(得分:0)

进程是一个操作系统级别的存储桶,应用程序将驻留在该存储桶中。

线程将包含在您的进程中,但主要由操作系统管理。

请在此处阅读:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684841(v=vs.85).aspx