CLR via C# 读书笔记 1-2 创建线程的成本
来源:互联网 发布:产品设计所需软件 编辑:程序博客网 时间:2024/06/05 03:50
在clr中创建线程的代价还是比较高的 ,他需要两个部分
内存:
- 线程核心对象, 存放描述线程的一些内容和上下文 . (内存消耗:700B-2500B)
- 线程环境,存放例如异常处理链之类. (内存消耗 1Page 4k-8k)
- 用户模式堆栈, 存放 参数 变量等 ,这也就是平时我们说的堆栈和堆的区别中的堆栈 (内存消耗:1MB)
- 核心模式堆栈, (内存消耗12KB-24KB)
基本上看来好像就消耗了1MB多一些的内存....不过如果你知道你的机器上一般都运行着数百个线程....可能就觉得这个数字太大了
CPU调度和上下文切换.
CPU在不同线程中切换的时候,需要卸载掉前一个线程的上下文,并加载后一个线程的上下文.
这也是一个非常消耗资源的操作
考虑到这两个原因,一般在非必要情况下,尽可能的不创建线程,或者优先使用线程池
PS1:每个普通的windows线程 (不是.net线程)也需要消耗1M的堆栈
PS2:widnows线程和.net线程 现在是1对1的,不过不保证在将来的实现中也是一对一的
PS3:运行在SYSTEM下的线程可能做了特殊的处理并没有消耗那么多的内存
PS4:书中提到每次切换上下文的时间是30MS,但是我个人觉得这个数字有点问题,似乎粒度不够细
PS5:考虑到线程创建的成本,尽可能的复用它,就像线程池一样
PS6:线程的成本低只是相对于进程而言,其实线程还是非常消耗资源的动作
PS7:真正创建和分配内存的动作在:Thread.Start, 而不在构造函数的时候
http://www.cnblogs.com/PurpleTide/archive/2010/11/12/1875763.html
0 0
- CLR via C# 读书笔记 1-2 创建线程的成本
- CLR via C# 读书笔记1-2
- CLR via C# 读书笔记2-1
- clr via c#读书笔记
- CLR via C#读书笔记
- CLR via C# 读书笔记2-2
- CLR via C# 读书笔记1-1
- CLR via C# 读书笔记2-3
- CLR via C# 读书笔记2-4
- CLR via C# 读书笔记2-4 追记
- CLR via C# 读书笔记2-5
- CLR via C# 读书笔记2-6
- CLR via C# 读书笔记2-7
- CLR via C# 读书笔记1-3
- CLR via C# 读书笔记1-4
- CLR via C# 读书笔记1-4 追记
- CLR via C# 读书笔记1-5
- CLR via C# 读书笔记1-6
- leetcode--Word Ladder II
- DWR反向Ajax的一个简单Web聊天
- javascript typeof 是个操作符 不是个函数
- hdu=1686 Oulipo
- 使用Apache 的 FTP Client获取FTP服务器上的文件列表FTP response 421 received.Server closed connection问题的解决
- CLR via C# 读书笔记 1-2 创建线程的成本
- SEO搜索引擎正排索引和倒排索引的区别
- 枚举(java.long包中的常用类之一)
- xib中设置控件的边框以及圆角
- 未能加载文件或程序集“MySql.Web.v20, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖
- Seek the Name, Seek the Fame
- 搜索引擎与SEO的纽带——你应该知道的事:网络爬虫
- Java中以字符流形式操作文件中的编码问题
- 暑期学校ACM之旅