我们什么时候在c#中进行多线程处理?

Jeb*_*bli 0 c# multithreading .net-2.0

我知道如何使用c#实现多线程.但我想知道它是如何工作的.

  1. 将只有一个线程一次运行,当该线程在等待它将执行第二个线程?
  2. 如果第二个线程正在执行并且第一个线程已准备就绪.会发生什么?
  3. 哪个主题优先?

我很难理解这个概念.我想了解为什么我们选择多线程,何时使用它.

提前致谢.

shf*_*301 17

线程可能同时运行也可能不运行.在单处理器计算机上,一次只运行一个线程.在多处理器系统(多处理器,多核,超线程)上,多个线程可以同时运行,每个处理器一个线程.

操作系统调度程序确定线程何时运行.Windows是一种抢占式多任务系统.它将运行一个线程一段时间,称为时间片(在Windows上为10ms或15ms),停止线程,然后确定下一个要运行的线程,这可能是正在运行的线程.实际算法很复杂.

线程确实具有优先级,因此影响这一点,所有事情都相同,优先级较高的线程将获得比优先级较低的线程更多的时间.如果你没有在线程上手动设置优先级,那么它默认为"Normal priority"在一个简单的例子中,两个具有相同优先级的线程准备运行,然后两个线程将运行相同的时间,可能循环赛.

关于我们为什么要进行多线程,有两个基本原因:

  1. 速度:在多处理器系统上,因为一次可以运行多个线程,我们的代码一次可以执行多个任务.例如,如果我们正在处理图像,我们将图像分割成碎片,并在图像的每个部分上使用不同的线程.
  2. 异步操作:有一些任务需要一段时间(例如从Internet读取文件),我们希望能够在我们做其他事情的同时让它继续下去,所以我们创建一个线程来进行下载在我们开展业务的同时.其中一个很大的吸引力是在GUI应用程序中我们不想阻止UI线程,因此用户界面仍然响应用户将进行处理.


Joh*_*zen 5

多线程在一个操作不需要阻止另一个操作的环境中很有用.

这个例子的主要例子是后台进程不应该锁定主用户界面线程.

操作系统通常会决定谁可以做什么,什么时候做.如果一台计算机只有一个核心,那么除了上面列出的核心之外,多线程几乎没有什么好处.但是,随着更多核心的添加,可以同时执行更多操作.

但是,即使在单核系统中,多线程也可以促进非阻塞IO,这对于提高应用程序的响应能力非常重要.