欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

线程基础

程序员文章站 2022-07-05 08:50:07
Windows 为什么要支持线程? 在早期的计算机,OS 没有线程的概念,整个系统执行着一个单线程,CPU 资源都被一个线程占用,你只能单一的处理一个 计算任务,比如单一处理打印,或一些其他的计算任务,当任务出BUG现异常,程序会停止响应,处理方式就是重启机器, 为了解决这个问题,基于多线程技术的操 ......

   Windows 为什么要支持线程?

    在早期的计算机,OS 没有线程的概念,整个系统执行着一个单线程,CPU 资源都被一个线程占用,你只能单一的处理一个

    计算任务,比如单一处理打印,或一些其他的计算任务,当任务出BUG现异常,程序会停止响应,处理方式就是重启机器,

    为了解决这个问题,基于多线程技术的操作系统MicroSoft Windows NT发展起来了.Windows NT 是最提出线程概念的Windows 

     OS.

     进程:抽象的概念是指应用程序要使用的资源的集合。

     线程:指对CPU 进行虚拟化.Windows 为每个进程都提供了该进程专用的线程(CPU 分片 抽象出来的一个专用CPU 概念)。

 

  线程开销:

  1.线程内核对象

  2.线程环境块

  3.用户模块栈

  4.内核模式堆栈

  5.DDL线程链接和线程分离(Attach AND detach)

  

  使用线程的理由:

  1.可响应性.

    Windows 为每个进程提供它自己的线程,确保发生死循环的时候应用程序不会阻止其他的应用程序,在GUI 应用程序中,可以将一些工作交给

  一个线程进行,使GUI 线程可以灵敏的响应用户,不会出现以前的那些windows 程序,冻结的情况。

  2.性能

    由于Windows 每个CPU 调度一个线程,而且多个CPU 能并发执行这些线程,所以,充分调动CPU 的计算能力,并发操作能显著的提高应用程序

  的性能。

 

  CLR 线程的种类

  1.前台线程:执行系统确实想要执行的任务,比如我想写一篇文章,比如处理我写文章的这个线程就是前台线程.

  2.后台线程:非关键性任务,比如写文章时候系统进行的拼写检查.

  

using System;
using System.Threading;
namespace BackGroundTreadTest
{
    class Program
    {
        static void Main()
        {
            Thread t = new Thread(Worker);
            t.IsBackground = true;//Change it to a background Thread
            t.Start();
            Console.WriteLine("Main Thread.....");
        }

        private static void Worker()
        {
            Thread.Sleep(10000);
            Console.WriteLine("Working....");
        }
    }
}

这一章节是操作系统线程的基本概念为异步并行编程做铺垫.