zoukankan      html  css  js  c++  java
  • 关于多线程生命周期原理

    平时我们经常听说asp.net页面生命周期,大致是 创建页面类,打造页面控件树,渲染响应输出页面(当然里面还有很多管道执行处理事件)最后呈现在我们面前就是一个网页(也就我们通常说的页面生命周期!)

    今天本人谈谈多线程的生命周期,如有不对还望包涵,多多指教!

    首先上上图:

       class Program
        {
            
            static void Main(string[] args)
            {
                //创建线程
                Thread thread = new Thread(run); 
                thread.Start();
                //主线程代码
                for (int i = 0; i < 100; i++)
                {
                    Console.WriteLine("main--->"+i);
                }
               
            }
    
            static void run()
            {
                for (int i = 0; i < 100; i++)
                {
                    Console.WriteLine("run"+i);
                }
            }
           
        }  
    

      

    为什么会出现这种输出情况呢?当然你们会想到不是多线程嘛,当然是可以切换的(不错一下,这里也就所谓的异步线程,要是同步线程必须等待另外一个线程结束才行,因为生活有的东西也必须用到同步,取钱就类似),没错这是线程产生的效果,这时候可能你会问,它们为什么输出结果有长有段呢?

    下面给出一个图来说说明它们为什么产生这种效果:

    新建状态:我们运行Main方法(也就是创建线程,他是一个主线)默认调statrt--->就绪状态

    就绪状态:表示有权限获取cpu的时间片,就是获取cpu分配执行这个线程的时间(说到这里你可能会明白一些东西,为什么相互切,为输它输出多一点,它要输出少一点!当然是分配的时间长短不一样!)----->运行状态

    运行状:也就是就绪状态拿到cpu分配的时间片之后就进入运行状态

    如输出:  main--->0 1  2 3  4 在输入run 0 1 2 3  因为main线程分配的cpu时间片只有那么一点时间如0.001s 运行状态方法没有执行完它的时间就用完了,从而进入

    阻塞状态,在去请求cpu分配执行时间片,当main时间片执行完了之后,thread线程它在创建的时候当然也分配时间。哥们你搞完了(搞完的是刚才的时间片哦),该我了!!!!

    所以就一直这样搞下去(当然接着上一次执行哦!),到线程销亡(所以就出现我们看到的效果!)。

    不从:上面输出有长有短,就是获取的cpu时间片长短不一样!主线程的执行for 时候,执行到输出 main 4 时间片就用完..同理run方也是一样的!

    下面上图看程序输出的不同结果!(看到效果再去看上面那个线程生命周期图)

    好了,就说到这里,如有说的不对的地方,欢迎指出就好,方不要丢砖哦!

  • 相关阅读:
    angularjs的$on、$emit、$broadcast
    angularjs中的路由介绍详解 ui-route(转)
    ionic入门教程-ionic路由详解(state、route、resolve)(转)
    Cocos Creator 加载使用protobuf第三方库,因为加载顺序报错
    Cocos Creator 计时器错误 cc.Scheduler: Illegal target which doesn't have uuid or instanceId.
    Cocos Creator 构造函数传参警告 Can not instantiate CCClass 'Test' with arguments.
    Cocos Creator 对象池NodePool
    Cocos Creator 坐标系 (convertToWorldSpaceAR、convertToNodeSpaceAR)
    Cocos Creator 常驻节点addPersistRootNode
    Cocos Creator 配合Tiled地图的使用
  • 原文地址:https://www.cnblogs.com/yzenet/p/3085435.html
Copyright © 2011-2022 走看看