Docker不做虚拟化内核,对.NET有什么影响?
2024-09-08 18:09:55
引子
前两天刷抖音,看见了这样一个问题。
问题:容器化不做虚拟内核,会有什么弊端?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数量是虚拟机的数量
Docker和虚拟机的区别:
最新文章
- 身份证验证JS代码
- Git分布式版本控制学习
- 文档对象模型(DOM)中的结点属性
- spring框架学习(二)依赖注入
- pickle 序列化反序列化
- Windows Azure服务
- OC对象的动态和静态构造区别
- linux上安装jdk并添加环境变量
- Android 4.0源码目录结构
- SharpZipLib要支持unicode的文件名称
- WCF入门教程二[WCF应用的通信过程]
- Bootstrap Paginator分页插件的使用
- 深入Java虚拟机读书笔记第五章Java虚拟机
- goldengate介绍
- ConcurrentSkipListMap深入分析
- 以太坊的crypto模块--以太坊源码学习
- 关于java中的数组
- 自学WEB前端能不能找到一份前端开发工作
- ps最最基础的文档
- 洛谷 P2671 求和 解题报告
热门文章
- day11-Servlet01
- javax.script.ScriptException: ReferenceError: ";window"; is not defined in security.js at line number 10
- i春秋Login
- python-opencv实现抖动算法
- 解决 linux mint 安装显卡驱动失败解决
- php+nginx环境搭建
- 【Java EE】Day02 MySQL概念、软件、语句
- Docker常用命令、Docker Compose、DockerFile实践
- GitOps实践之kubernetes安装argocd
- Redis——02 学习