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