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()方法

  • 相关阅读:
    【一周读书】哲学家,你们都干了些什么?
    我的软件工程课目标
    【一周读书】《把时间当作朋友》《一个人就是一支骑兵》读书心得
    LANMP安全配置学习之PHP安全配置
    XXE漏洞学习
    利用bWAPP学习SSRF
    Vulnhub靶场之DC-1
    74CMS4.1.2.4版本黑盒测试
    业务逻辑漏洞——浅谈验证码漏洞
    bWAPP靶场之HTML Injection(GET)
  • 原文地址:https://www.cnblogs.com/code-charmer/p/4080583.html
Copyright © 2011-2022 走看看