zoukankan      html  css  js  c++  java
  • 在Window环境下多线程与CPU资源分配原则

    首先强调一下是在windowNT环境下,linux是完全不同的效果,这取决于操作系统的CPU资源分配算法。

    背景介绍:

    如果有三个(或者更多)线程异步执行各自的算法(不知道是哪个SB写的算法,相当耗资源),那么这三个线程的CPU资源是如何分配的呢?

    先上一段代码和效果图

     1   class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             int i = 0;
     6             while (i<30)
     7             { 
     8                 new Thread(new ParameterizedThreadStart(o =>
     9                 {
    10                     Console.WriteLine("*************************");
    11                     i++;
    12                 })).Start();
    13                 new Thread(new ParameterizedThreadStart(o =>
    14                 {
    15                     Console.WriteLine("++++++++++++++++++++++++");
    16                     i++;
    17                 })).Start();
    18                 new Thread(new ParameterizedThreadStart(o =>
    19                 {
    20                     while (i < 30)
    21                     {
    22                         Console.WriteLine(i.ToString());
    23                         i++;
    24                         Thread.Sleep(0);
    25                     }
    26                 })).Start();
    27             }
    28             Console.Read();
    29 
    30         }
    31     }


    如果将第24行注释,结果截然不同,那么ThreadSleep(0)的作用就明显了,虽然从代码逻辑上理解应该是线程Sleep 0 毫秒,想多没做任何事情,对于windows操作系统截然不同,这句话的意思系统理解为 这次不参与cpu资源竞争。

    因为window的cpu资源分配时按照“民主”的方式进行分配的,所有需要资源的线程都在系统中排队等候,系统会给他们分级,哪一个最需要资源,哪一个最不需要资源,相当于给每一个资源申请者添加了一个权值(如果申请者是个美女,权值自然就高)。当上一个使用者释放cpu之后,系统会安排下一个去使用cpu(说了这么多,也没见到与linux有啥区别,但是下面就不一样了),当使用者占用CPU之后,一定要占用着主动释放,否则cpu将一直被占用。

    所以,在做多线程的时候应该要注意资源的释放。

    如有错误,望指正!

  • 相关阅读:
    (转)Web自动化测试中的接口测试
    Redis在.net中的应用学习
    Redis学习第八课:Redis高级实用特性(一)
    Redis学习第七课:键值命令和服务器命令
    Redis学习第六课:Redis ZSet类型及操作
    先验概率 vs 后验概率
    cout格式化输出
    python练习linux下创建路径
    把“苹果中国首发”视为扬眉吐气是自卑的表现
    字符串处理算法(三)按指定位置交换字符串两部分的位置
  • 原文地址:https://www.cnblogs.com/xiaoch/p/13417956.html
Copyright © 2011-2022 走看看