zoukankan      html  css  js  c++  java
  • Professional c# 2008.Ch19线程和同步

    概述

    一个进程的多个线程可以运行在不同的cpu上,或者多个核心的cpu的不同核心上。

    windows 资源管理其thread列可以查看进程和每个进程的线程号。

    进程包含资源,例如window句柄、文件系统句柄和其他核心对象。每个进程都分配了虚拟内存。一个进程至少包含一个线程。操作系统会调度线程。线程有一个优先级、正在处理的程序的位置的计算器、一个存储器本地变量的堆栈。每个线程都有自己的堆栈,但程序代码的内存和对有进程内所有线程共享。这使一个进程中的所有线程通讯非常快--该进程的所有线程都寻址相同的虚拟内存。但是,这也是处理比较苦难,因为多个线程可以修改同一个位置的内存。

    进程管理的资源包括虚拟内存和windows 句柄,其中至少包含一个线程,线程是运行程序所必须的。

    .Net 托管线程有Thread类定义,托管线程不一定映射到操作系统线程。尽管这样的情况可能出现,但应由.Net运行库将托管线程映射到操作系统的物理线程上。这方面sql server 2005 的运行主机与windws的运行主机完全不同。使用ProcessThread可以获得内部现成的信息,但在托管的应用程序中,通常最好使用托管线程。

    异步委托

      创建线程的简单方法是定义一个委托,异步调用它,委托是方法类型安全的引用。Delegete类还支持异步调用方法。在后天Delegete类类会创建一个执行任务的线程。

    Delegate。Demo
     1     public delegate int TakesAWhileDelegate(int data, int ms);
     2     class Program
     3     {
     4         static void Main(string[] args)
     5         {
     6             TakesAWhileDelegate take = TakesWhile;
     7             IAsyncResult ir = take.BeginInvoke(1, 3000, null, null);
     8             while (!ir.IsCompleted)
     9             {
    10                 Console.Write(".");
    11                 Thread.Sleep(50);
    
    12             }
    13             int result = take.EndInvoke(ir);
    14             Console.WriteLine(result);
    15             Console.ReadKey();
    16         }
    17         static int TakesWhile(int data, int ms)
    18         {
    19             Console.WriteLine("TasksAWhile is started.");
    20             Thread.Sleep(ms);
    21             Console.WriteLine("TakesAWHile is end.");
    22             return ++data;
    23         }
    24     }
  • 相关阅读:
    SQL Server 调优系列进阶篇
    封装 RabbitMQ.NET
    RabbitMQ 的行为艺术
    SQL Server 调优系列进阶篇
    SQL Server 调优系列进阶篇
    FastFrameWork 快速开发框架
    SQL Server 调优系列进阶篇
    Java基础:三目运算符
    marquee标签,好神奇啊...
    Java JFrame 和 Frame 的区别
  • 原文地址:https://www.cnblogs.com/lovey/p/3011016.html
Copyright © 2011-2022 走看看