Thread基础

Thread的基础知识

一.空间的开销

1.Thread可以理解为操作系统的概率

Thread的内核数据结构,其中有osid,context=>cpu寄存器的里面的一些变量.

时间片切换,切换间隔30ms

2.Thread环境块

TLS[thread本地存储],ExecptionList的信息

工具:WinDbg

功能:查看底层,线程的信息,如主线程,结束线程,OSID,终结器等!

命令:

  • .loadby sos clr:对于.Net Runtime 4.0,加载所有的DLL
  • !threads: 查看托管线程
  • !teb:列出结构_TEB的成员信息
  • !dumpdomain:查看程序域

3.用户模式堆栈:内存溢出的一个异常【堆栈溢出】

​ 一个线程分配1m的堆栈空间,存放【参数,局部变量】

4.内核模式堆栈

​ 在CLR的线程操作,包括线程同步,大多数调用底层的Win32函数,用户模式的参数需要传递到内核模式。

二.时间开销

1.我们的Application启动的时候,回加载很多的dll【托管和非托管】,exe,资源,元数据

进程启动时候为什么我没看到应用程序域?

答:进程启动回默认启动3个应用程序域。System domain,shared domain,domain


开启一个thread,销毁一个thread都会通知进程中的dll,attach,detach标志位

通知dll的目的就是给thread做准备工作,比如销毁,让这些dll做资源清理

2.时间片切换

4个逻辑处理器,可提供4个thread并行执行

执行5个thread,就有个一个thread休眠30ms