zoukankan      html  css  js  c++  java
  • C#之多线程编程

    一.进程与线程

    进程(Process)是对一段静态指令序列(程序)的动态执行过程,是系统进行资源分配和调度的一个基本单位。与进程相关的信息
    包括进程的用户标识,正在执行的已经编译好的程序,进程程序和数据在存储器中的位置等。

    同一个进程又可以划分为若干个独立的执行流,我们称之为线程(Thread),线程是进程中的基本执行。

    在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。一个标准的线程由线程ID(唯一标识),CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。

    线程与进程的区别

    一个进程拥有自己独立的内存空间和数据,但是同一个进程内的线程是共享其进程所拥有的内存空间和数据的。虽然每个线程可以拥有自己的堆栈和寄存器,但它基本不拥有系统资源,线程的运行依赖于进程提供的上下文环境,并且使用的是进程的资源。

    线程的调度

    有两种调度模型:分时调度模型抢占式调度模型。.NET采用抢占式调度模型,即优先让运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。

    如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下办法之一:

    调整各个线程的优先级

    让处于运行状态的线程调用Thread.Sleep()方法

    让处于运行状态的线程调用Thread. Suspend ()方法

    让处于运行状态的线程调用另一个线程的Join()方法

  • 相关阅读:
    解决new file()在IOS下不兼容问题
    去除ios上input输入框上方的阴影
    前端不同设备的网页字体设置
    Vue进行请求拦截
    Vue路由拦截
    js判断当前是ios还是android
    身份证号码验证,验证最后一位校验码
    查询MySQL数据表的字段名和表结构
    JAVA中循环删除list中元素的方法总结
    eclipse修改默认注释
  • 原文地址:https://www.cnblogs.com/code-charmer/p/4080583.html
Copyright © 2011-2022 走看看