.net中的线程

1. 目前,CLR直接使用了Windows的线程,然而将来可能会分离出来,提供比Windows线程更好的功能和性能

2. 创建线程和销毁线程的动作相当的昂贵:

创建线程必须分配并初始化一个线程核心对象,每个线程的用户模式堆栈分配1M的保留地址空间,核心模式堆栈分配12K的保留空间;在线程创建后,Windows立刻通知进程中的每个DLL一个新线程建好了;同样销毁线程也需要通知所有的DLL并释放那些为用户模式堆栈和核心模式堆栈保留的地址空间

3. 运行时线程间的切换代价也不小

切换线程时:1). 操作系统进入Kernal mode 2)把CPU寄存器保存入当前执行线程的kernal 对象 3)要求一个spin锁,决定下一步执行哪个线程,释放spin锁 4)从准备执行的线程核心对象载入CPU寄存器的值 5)操作系统离开核心模式

posted @ 2010-01-29 00:09  如斯夫  阅读(172)  评论(0编辑  收藏  举报