zoukankan      html  css  js  c++  java
  • (CLR via C#学习笔记)线程基础

    一 使用线程的理由

    1.可响应性(通常是对于客户端GUI应用程序);
    2.性能,多个CPU(或多核CPU)能并发执行多个线程,同时执行多个操作能提升性能.

    二 线程开销

    线程有空间(内存耗用)和时间(运行时的执行性能)上的开销.
    1.创建线程,让线程进驻系统以及最后销毁线程需要空间和时间的消耗;
    2.系统进行上下文切换,选择要执行的线程,CPU执行所选的线程,该线程只能在一个"时间片"里去执行线程操作,
    实际上,上下文切换对性能影响很大.

    三 线程调度和优先级

    1.每个线程都分配了0(最低)到31(最高)的优先级,系统上下文切换调度优先级较高的线程;
    2.较高优先级的线程调度完毕后,较低优先级的线程才可以得到调度.
    3.较高优先级的线程总是抢占较低优先级的线程,较低优先级的线程在运行时,如果有一个较高优先级
    的线程准备好运行,系统会立即挂起较低优先级的线程(即时较低优先级线程的时间片还没用完),将CPU分配
    给较高优先级的线程(抢占式).

    四 前台线程和后台线程

    CLR将每个线程要么视为前台线程,要么视为后台线程,
    一个进程的所有前台线程停止运行时,CLR强制终止仍在运行的任何后台线程

    相关代码:

    static void Main(string[] args)
            {
                //创建新线程,默认为前台线程
                Thread t = new Thread(DoSomething);
    
                //设置线程为后台线程
                t.IsBackground = true;
    
                //启动线程
                t.Start();
    
                Console.WriteLine("主线程执行完毕");
    
                return;
            }
    
            static void DoSomething()
            {
                Thread.Sleep(5000);
                Console.WriteLine("新线程执行完毕");
            }
    

    如果新线程是以默认的前台线程运行(IsBackground = false),运行结果为: 输出"主线程执行完毕"  ->  5秒后输出"新线程执行完毕"  -> 程序退出.

    如果新线程是以后台线程的形式运行(IsBackground = true),  运行结果为: 输出"主线程执行完毕"  ->  程序退出.  

  • 相关阅读:
    统计学方法(t-检验)
    generate的使用verilog
    FPGA的存储方式大全
    matlab函数
    三年后的我-记于2018
    labview学习——用户界面模式
    labview线程相关
    labview状态机
    JS~字符串长度判断,超出进行自动截取(支持中文)
    AngulaJs -- 隔离作用域
  • 原文地址:https://www.cnblogs.com/miaosha5s/p/7094546.html
Copyright © 2011-2022 走看看