ale*_*hev 9 .net c# multithreading
我今天有一个有趣的面试问题.考虑您有以下控制台应用程序:
static void Main(string[] args)
{
Console.WriteLine("Hello world");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
当达到Console.ReadLine()行时,执行被暂停,程序等待键盘的输入.此时有多少个线程以及它们处于什么状态,例如Running,Suspended等?
我想面试官所追求的是对构成.NET控制台应用程序的线程的认识/理解以及它们如何协同工作以与底层操作系统的IO子系统交互.
Lua*_*aan 12
没有明确的数字.
您的代码仅在一个线程上运行 - 主线程.调用Console.ReadLine
不会创建一个新线程,它只是启动一个I/O请求并等待它被处理 - 这不需要线程,但由于你使用的是同步API,所以没有办法释放你的线程,所以它只是块.如果面试官只想要一个数字,这就是数字 - 它是你拥有的唯一应用程序线程,其他一切都是实现细节.
有很多基础设施线程 - 垃圾收集器线程是主要线程,其中一些线程一直在创建和销毁.
最后,介于两者之间的线程 - 最值得注意的是线程池.由于您没有使用线程池,因此它将具有默认的线程数 - 除非配置另有说明,这通常是每个逻辑CPU核心两个线程.
现实更深刻.例如,.NET线程是托管线程,它们可以在运行时意愿的"本机"线程之间跳过.但是,除非您正在编写自己的.NET运行时或操作系统,否则这是您永远不需要关心的事情:)或者,与依赖于本机线程关联的本机代码进行大量互操作(同样,不常见) .
我怀疑这个问题的主要目的是让你谈论Windows线程模型如何工作,.NET如何处理线程以及典型的Windows/.NET应用程序中的线程类型.但主要是,让你谈谈:P
归档时间: |
|
查看次数: |
875 次 |
最近记录: |