【发布时间】:2019-10-25 18:58:49
【问题描述】:
对my question 的评论表明,“SynchronizationContext”决定了任务是作为单独的线程运行还是在一个线程上运行,但在对this question 的任何回答中都没有提到这一点,也没有提到任务何时实际运行的任何细节在单独的线程上并行或仅在同一线程上运行,但在等待 IO 时可能在它们之间共享工作。
特别是,我正在寻找Thread 对象和Task 对象在此上下文中的比较,无论它们的行为相同还是不同。
“async”和“await”如何连接(或不连接)这也会有所帮助。
举个例子,假设我有两个动作:
f:忙非 IO 循环一秒钟g:休眠一秒钟
让我们假设我的 CPU 拥有大量可笑的内核。
给定以下代码,无论是h = f,还是h = g,运行时间应该接近一秒吗?
Thread x1 = new Thread(h);
Thread x2 = new Thread(h);
Thread x3 = new Thread(h);
Thread x4 = new Thread(h);
Thread x5 = new Thread(h);
x1.Start();
x2.Start();
x3.Start();
x4.Start();
x5.Start();
x1.Join();
x2.Join();
x3.Join();
x4.Join();
x5.Join();
假设我为任务做了类似的事情:
Task x1 = new Task(h);
Task x2 = new Task(h);
Task x3 = new Task(h);
Task x4 = new Task(h);
Task x5 = new Task(h);
x1.Start();
x2.Start();
x3.Start();
x4.Start();
x5.Start();
x1.Wait();
x2.Wait();
x3.Wait();
x4.Wait();
x5.Wait();
对于h = f 和h = g 的情况,此任务代码需要多长时间才能运行,如果取决于,什么情况会有所不同以及如何控制它们?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c# .net multithreading task threadpool