引子

前两天刷抖音,看见了这样一个问题。

问题:容器化不做虚拟内核,会有什么弊端?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. 环境准备

  1. 本机CPU--6个

  1. 虚拟机分配CPU--4个

  1. Docker分配CPU--1个

测试结果

程序最终获取CPU数量是虚拟机的数量

Docker和虚拟机的区别:

最新文章

  1. 身份证验证JS代码
  2. Git分布式版本控制学习
  3. 文档对象模型(DOM)中的结点属性
  4. spring框架学习(二)依赖注入
  5. pickle 序列化反序列化
  6. Windows Azure服务
  7. OC对象的动态和静态构造区别
  8. linux上安装jdk并添加环境变量
  9. Android 4.0源码目录结构
  10. SharpZipLib要支持unicode的文件名称
  11. WCF入门教程二[WCF应用的通信过程]
  12. Bootstrap Paginator分页插件的使用
  13. 深入Java虚拟机读书笔记第五章Java虚拟机
  14. goldengate介绍
  15. ConcurrentSkipListMap深入分析
  16. 以太坊的crypto模块--以太坊源码学习
  17. 关于java中的数组
  18. 自学WEB前端能不能找到一份前端开发工作
  19. ps最最基础的文档
  20. 洛谷 P2671 求和 解题报告

热门文章

  1. day11-Servlet01
  2. javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10
  3. i春秋Login
  4. python-opencv实现抖动算法
  5. 解决 linux mint 安装显卡驱动失败解决
  6. php+nginx环境搭建
  7. 【Java EE】Day02 MySQL概念、软件、语句
  8. Docker常用命令、Docker Compose、DockerFile实践
  9. GitOps实践之kubernetes安装argocd
  10. Redis——02 学习