c# - 多线程并行编程示例

标签 c# multithreading parallel-processing

所以我想我理解了并行编程和多线程的概述概念,但我想知道是否可以实现多进程多线程应用程序。如果这是有道理的,那么在查看多线程的一些描述时,它可以在一个处理器上运行,但是如果您可以使用并行在多个内核上进行处理,那么您也可以在多个内核上进行多线程处理吗?如果可以的话,有人可以给我看一个简单的例子吗,也许使用 for 循环

多线程示例:

public class Test
{
    static void Main()
    {
        Counter foo = new Counter();
        ThreadStart job = new ThreadStart(foo.Count);
        Thread thread = new Thread(job);
        thread.Start();

        for (int i=0; i < 5; i++)
        {
            Console.WriteLine ("Main thread: {0}", i);
            Thread.Sleep(1000);
        }
    }
}

public class Counter
{
    public void Count()
    {
        for (int i=0; i < 10; i++)
        {
            Console.WriteLine ("Other thread: {0}", i);
            Thread.Sleep(500);
        }
    }
}

并行示例:

int n = ...
Parallel.For(0, n, i =>
{
   // ... 
});

最佳答案

将任务分配给可用的逻辑 CPU 是操作系统的任务。如果您编写多线程应用程序,操作系统将管理将各种线程分配给系统中的硬件处理器。作为程序员,您无需执行任何操作即可实现这一目标。

但是,您可以直接管理它 - 关联特定线程以在特定核心或逻辑处理器子集上运行,但通常这比允许操作系统管理硬件分配效率低,因为它对所有进程有更广泛的了解在系统上运行并且在大多数情况下以最有效的方式处理分配。

简而言之,如果您的应用程序是多线程的,那么它在系统提供的尽可能多的可用内核上运行。

关于c# - 多线程并行编程示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15705752/

相关文章:

c# - .NET 相当于 java.awt.color.ColorSpace

C# 从 DataGridView 中删除行并更新数据库

c# - 检查 C# 中的 WMI 命名空间是否存在

c# - 在Azure API for VM中,是否有一种方法可以用一种方法定义许多现有的数据磁盘?

java - 如何让我的程序等待特定线程并且不影响我的 GUI 的交互性?

ios - dispatch_sync 比@synchronized 有什么优势?

c - sem_wait 上的线程阻塞导致其他线程挂起

r - 事先知道要 clusterExport 的对象

c++ - 通过共享对象线程进行的迭代安全吗?

c++ - openmp/C++ 简单并行区域返回不一致的结果