<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .NET中的線程本地存儲(TLS)與AsyncLocal(一)

      一、TLS

            線程本地存儲(Thread Local Storage),字面意思就是專屬某個線程的存儲空間。變量大體上分為全局變量局部變量,一個進程中的所有線程共享地址空間,這個地址空間被劃分為幾個固有的區域,比如堆棧區全局變量區等,全局變量存儲在全局變量區,虛擬地址固定;局部變量存儲在堆棧區,虛擬地址不固定。每個線程都有自己的棧空間,局部變量就存儲在棧空間里面,雖然這個局部變量是與線程相聯系的,但是這個局部變量不能在不同的函數棧中互相直接訪問,但TLS可以,概括來講,TLS是屬于線程的“局部變量”,作用域為線程作用域,而不像全局變量為全局作用域,局部變量為局部作用域,因為這個變量獨屬于這個線程,所以這個變量是線程安全的。

      二、.NET中相關的類——ThreadLocal

            代碼更直觀,請看下面的代碼:

       1 static void Main(string[] args)
       2 {
       3      ThreadLocal<int> threadLocal = new ThreadLocal<int>();
       4      //在主線程這個變量值為1
       5      threadLocal.Value = 1;
       6      new Thread(() => Console.WriteLine($"托管線程ID:{Thread.CurrentThread.ManagedThreadId} 值為:{threadLocal.Value++}")).Start();
       7      new Thread(() => Console.WriteLine($"托管線程ID:{Thread.CurrentThread.ManagedThreadId} 值為:{threadLocal.Value++}")).Start();
       8      new Thread(() => Console.WriteLine($"托管線程ID:{Thread.CurrentThread.ManagedThreadId} 值為:{threadLocal.Value++}")).Start();
       9      Console.WriteLine($"主線程ID:{Thread.CurrentThread.ManagedThreadId} 值為:{threadLocal.Value}");
      10 }



            輸出結果如下:

      image

            可以看見每個這個變量的值對于每個線程來說都是獨立的,一個線程對這個變量的修改只會影響本線程的讀取,每個線程都有一份拷貝。

            有什么用呢?或者使用場景是什么呢?我覺得就是一句話——當每個線程都需要一個唯一的變量的時候

            比如早期版本的ASP.NET,每個線程處理一個Http請求,在處理這個Http請求的線程中,這個HttpContext在這個線程中是唯一的,所以在每個函數中都可以調用HttpContext.Current獲得當前Http請求上下文對象,為了加深理解,請看下面的代碼

       1 public class ConsoleContext
       2 
       3 {
       4 
       5      private static ThreadLocal<ConsoleContext> _tlsCCT = new ThreadLocal<ConsoleContext>();
       6 
       7      private string _consoleName;
       8 
       9     public string ConsoleName { get => _consoleName; }
      10 
      11      public static ConsoleContext Current { get => _tlsCCT.Value; }
      12 
      13     public ConsoleContext(string consoleName)
      14 
      15      {
      16 
      17          _consoleName = consoleName;
      18 
      19          _tlsCCT.Value = this;
      20 
      21      }
      22 
      23      public static void ResetContext() => _tlsCCT.Value = null;
      24 
      25 }
      26 
      27 public static void Excute()
      28 
      29 {
      30 
      31      Thread.Sleep(1000 * new Random(DateTime.Now.Millisecond).Next(5,10));
      32 
      33      Console.WriteLine("進入PrintName()");
      34 
      35      PrintName();
      36 
      37 }
      38 
      39 public static void PrintName()
      40 
      41 {
      42 
      43      var name = ConsoleContext.Current.ConsoleName;
      44 
      45      Console.WriteLine($"當前托管線程ID:{Thread.CurrentThread.ManagedThreadId} name:{name}");
      46 
      47 }
      48 
      49 static void Main(string[] args)
      50 
      51 {
      52 
      53      while (true)
      54 
      55      {
      56 
      57          var name = Console.ReadLine();
      58 
      59         ThreadPool.QueueUserWorkItem(state =>
      60 
      61          {
      62 
      63              Console.WriteLine($"當前托管線程ID:{Thread.CurrentThread.ManagedThreadId} name:{name}");
      64 
      65              new ConsoleContext(name);
      66 
      67              Excute();
      68 
      69              ConsoleContext.ResetContext();
      70 
      71          });
      72 
      73      }
      74 
      75 }


            簡單來說,我模擬了一個Web服務器的行為,監聽請求(在這里是監聽鍵盤輸入),若沒有請求過來,服務器程序阻塞,若有請求過來(在這里是鍵盤輸入),服務器響應請求,生成當前請求上下文,并生成一個TLS變量,然后執行Excute函數(相當HttpContext流入處理管道),最后清空TLS變量中的值,因為該線程是線程池中的線程,會被復用用于處理其他請求,不清空TLS會生成臟數據。

      posted @ 2020-07-06 10:22  白煙染黑墨  閱讀(754)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产人妻精品午夜福利免费 | 亚洲精品天堂一区二区| 国产熟女精品一区二区三区| 国内精品久久人妻无码妲| AV无码不卡一区二区三区| 在线精品国精品国产不卡| 欧美一区二区三区欧美日韩亚洲| 亚洲中文字幕无码中字| 亚洲国产一区二区三区四| 国产久免费热视频在线观看| 天峨县| 老熟妇欲乱一区二区三区| 欧美嫩交一区二区三区| 116美女极品a级毛片| 国产果冻豆传媒麻婆精东| 亚洲国产99精品国自产拍| 精品中文人妻在线不卡| 农村老熟女一区二区三区| 亚洲情综合五月天| 伊人成人在线视频免费| 农村乱色一区二区高清视频| japanese边做边乳喷| 日本高清在线播放一区二区三区| 亚洲成片在线看一区二区| 中文字幕人妻中文AV不卡专区| 中文字幕人妻中文AV不卡专区| 东京热加勒比无码少妇| 中文无码高潮到痉挛在线视频| 亚洲欧美人成电影在线观看 | 欧美白妞大战非洲大炮| 未满十八18禁止免费无码网站| 国产精品一区二区三区色| 国产伦一区二区三区视频| 欧美特级午夜一区二区三区| 国产精品污双胞胎在线观看| 人妻无码久久久久久久久久久| 欧美午夜成人片在线观看| 白银市| 亚洲av熟女国产一二三| 国产精品推荐视频一区二区| 国产精品久久精品|