小编fre*_*eud的帖子

等待异步模式和工作窃取线程

我试图理解async/await模式的基本机制,我想在阅读Jennifer Marsman 撰写的.NET 4.0中的杰出工作之后我得到了它 .我的理解是

1 - 线程池有全局队列,线程池中的每个线程都有本地队列

2 - 请求进入,在全局队列中,然后线程池中的thread1(T1)抓取请求.

3 - 此请求是async\await方法.一旦命中了await关键字,就会创建一个包含在任务中的书签(回调)(假定任务未完成),并且此任务被放置在T1的本地队列中.T1返回池中

4 - 任务完成后,如果T1不忙,T1将处理该请求.但是如果T1忙,另一个线程(称之为T2)可能实际上从T1的本地队列中窃取了这个任务

这是我的问题所在.这是如何被禁止的?我读到的所有内容都表明async\await不会改变线程上下文.请参阅链接MSDN对async\await的解释这也是有意义的,因为在MVC应用程序中,请求绑定到一个线程.这意味着如果请求来到异步操作方法,我希望初始和延续任务都由同一个线程池线程完成.工作如何窃取线程不会干扰这一点?欣赏任何洞察力.

.net multithreading asynchronous

3
推荐指数
1
解决办法
741
查看次数

标签 统计

.net ×1

asynchronous ×1

multithreading ×1