创建线程的开销

线程创建的开销

对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。【分配内存、列入调度、内存换页、清空缓存和重新读取】

关于内存开销

Java线程的线程栈区别于堆,它是不受Java程序控制的,只受系统资源限制。默认一个线程的线程栈大小是1M,别小看这1M的空间,如果每个用户请求都新建线程的话,1024个用户光线程就占用了1个G的内存,如果系统比较大的话,一下子系统资源就不够用了,最后程序就崩溃了。

【创建一个线程默认需要消耗1M的内存,如果每个用户请求都创建一个线程,那么1024个用户就是1G了,并发量一大就扛不住了】

如果不对线程的创建进行有效监控、管理,风险巨大:

  1. 频繁申请/销毁资源和调度资源,将带来额外的消耗,可能会非常巨大。
  2. 对资源无限申请缺少抑制手段,将引发系统资源耗尽的风险。
  3. 系统无法合理管理内部的资源分布,将降低系统的稳定性。

正是因为如此大的开销,所以几乎所有的servlet容器、web框架、rpc框架都会采用线程池化技术去提高资源复用,限制线程的随意创建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值