首页 > 云计算 > > Docker不做虚拟化内核,对.NET有什么影响?
前两天刷抖音,看见了这样一个问题。
问题:容器化不做虚拟内核,会有什么弊端?Java很多方法会跟CPU的核数有关,这个时候调用系统函数,读到的是宿主机信息,而不是我们限制资源的大小。
思考:在我们.NET中是否也会出现这种问题呢?
在我们.NET中,并行编程(Parallel)或者线程池(ThreedPool)中,默认会根据CPU数量对我们进行线程分配。
于是我就从Parallel中,找到TaskReplicator类(该类主要用于同时在一个或多个Task中运行委托)下的GenerateCooperativeMultitaskingTaskTimeout方法。
private static int GenerateCooperativeMultitaskingTaskTimeout()
{
// This logic ensures that we have a diversity of timeouts across worker tasks (100, 150, 200, 250, 100, etc)
// Otherwise all worker will try to timeout at precisely the same point, which is bad if the work is just about to finish.
int period = Environment.ProcessorCount;
int pseudoRnd = Environment.TickCount;
return CooperativeMultitaskingTaskTimeout_Min + (pseudoRnd % period) * CooperativeMultitaskingTaskTimeout_Increment;
}
抽取获取处理器数量方法Environment.ProcessorCount,放到控制台中。
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("获取宿主机器处理器数量:"+Environment.ProcessorCount);
Console.ReadLine();
}
}



程序最终获取CPU数量是虚拟机的数量
采用cpus结果:

采用–cpuset-cpus命令结果:

Docker和虚拟机的区别:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000523/viewspace-3149663/ ,如需转载,请注明出处,否则将追究法律责任。