在.NET中有关阻塞调用的线程调度

4
假设我在C#应用程序中产生了三个线程:T1、T2和T3,并为每个线程发出Run调用。通常情况下,处理器会以循环方式(单处理器和所有线程具有相同的优先级)安排线程。但是,假设线程T1发出一个阻塞的网络服务调用。它会立即被抢占还是在其时间片完成后才被抢占?基本上,发出网络服务调用(或任何其他调用)是否导致线程处于阻塞状态?

你为什么对此感兴趣呢?这非常依赖于操作系统。希望你不是在进行一些微小的线程优化,是吗?有一个原因,这个东西被屏蔽了。 - Aliostad
这是我脑海中出现的一个疑问,所以我只想澄清一下。 - Viking17
1个回答

2

一旦线程发出阻塞系统调用(任何IO请求),它就会被暂停,并且只有在该系统调用完成后才标记为“就绪”(尚未运行)。

因此,是的,它将立即被抢占。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接