Docker不做虚拟化内核,对.NET有什么影响?
2023-03-20 15:23:04 时间
引子
前两天刷抖音,看见了这样一个问题。
问题:容器化不做虚拟内核,会有什么弊端?Java很多方法会跟CPU的核数有关,这个时候调用系统函数,读到的是宿主机信息,而不是我们限制资源的大小。
思考:在我们.NET中是否也会出现这种问题呢?
环境准备
1. 准备程序
在我们.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();
}
}
2. 环境准备
- 本机CPU--6个
- 虚拟机分配CPU--4个
- Docker分配CPU--1个
测试结果
程序最终获取CPU数量是虚拟机的数量
采用cpus结果:
采用–cpuset-cpus命令结果:
Docker和虚拟机的区别:
相关文章
- Rails MVC 和 CRUD(1)
- FANUC机器人PROFINET双通道板卡组态
- 网络IO
- 开源自己编写的半人工标注平台PaddleOCRLabel(.NET Winform版本)
- 还在死磕Ajax,不如看看Fetch ?
- 【ASP.NET Core】动态映射MVC路由
- 【ASP.NET Core】用配置文件来设置授权角色
- 【ASP.NET Core】按用户等级授权
- 【ASP.NET Core】自定义Session的存储方式
- 【ASP.NET Core】选项类的依赖注入
- 【ASP.NET Core】选项模式的相关接口
- 【ASP.NET Core】模型绑定:重命名绑定字段
- 【ASP.NET Core】配置应用程序地址的N多种方法
- 【ASP.NET Core】自己编程来生成自签名的服务器证书
- 【ASP.NET Core】设置 Web API 响应数据的格式——FormatFilter特性篇
- 【ASP.NET Core】设置Web API 响应的数据格式——Produces 特性篇
- 【ASP.NET Core】使用最熟悉的Session验证方案
- 【.NET 与树莓派】WS28XX 灯带的颜色渐变动画
- 【.NET 与树莓派】控制彩色灯带(WS28XX)
- 【.NET 与树莓派】MPD 的 Mini-API 封装