为了账号安全,请及时绑定邮箱和手机立即绑定

线程创建开销包括哪些?

线程创建开销包括哪些?

撒科打诨 2019-03-29 15:19:38
在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际处理实际的用户请求的时间和资源要多的多。那么问题来了,创建一个线程到底要有哪些开销?各个开销耗时多么?哪个开销最耗时?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

通常是 pthread_create


查看完整回答
反对 回复 2019-04-22
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说。
关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受java程序控制的,只受系统资源限制,默认一个线程的线程栈大小是1M(当让这个可以通过设置-Xss属性设置,但是要注意栈溢出问题),但是,如果每个用户请求都新建线程的话,1024个用户光线程就占用了1个G的内存,如果系统比较大的话,一下子系统资源就不够用了,最后程序就崩溃了。

PS:同样的道理在java程序中也不要随意开启新的线程,特别是高频业务尽量使用线程池,不然很容易导致内存不足,程序崩溃的问题。


查看完整回答
反对 回复 2019-04-22
?
烙印99

TA贡献1829条经验 获得超13个赞

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


查看完整回答
反对 回复 2019-04-22
  • 3 回答
  • 0 关注
  • 2337 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信