java线程切换速度_为什么说线程太多,cpu切换线程会浪费很多时间?

cpu在执行代码的时候【以下说明只在linux平台上,win我不会】

该程序已经是ELF executable file 且该文件内部按ELF格式存储了机器指令+数据

同时该文件必须引用linux 的核心api库【动态库】libc.so 及linux-x86-64.so 核心文件。

启动的时候操作系统会识别该文件的ELF文件头信息【引入的api库提供了核心的execve函数用来执行程序】,进行判断,如果是ELF executable file就会把机器指令+数据装载到内存中去运行。

如果该文件不是elf executable file就会读取该文件的第一行数据并当作解释器来运行。

go,java,python,php都是这种玩意,写的代码都是伪代码【变化的非常骚】,都要go,java,python,php[elf文件如go run xxx.go php xx.php python xxx.py javac xxx.java java xxx运行,前面的这些文件是elf文件,后面的就是大家所认为的源码文件,通过web来访问大家所撸的go,java,py,php原理都一个样]

当程序启动时[如/bin/java demo],会读取后面的源码文件【如java 会execve(bin/java...) 再read 该的elf信息】,后面会打开demo.class文件并读取内容【做各种所谓的骚处理】

其它语言【go,py,php】同理。

启动后就是一个进程了并且默认是从主线程开始执行,主线程结束,整个进程结束

如果开启了多个线程【每个线程都有一个入口函数】,当线程数量小于或等于cpu核心数时,理论上是并发执行,否则则是模拟”并发执行“

当cpu切换到当前进程时执行某个或是某几个【多核时】线程时,可能会原因阻塞,锁等情况,被其它线程抢占运行,那么当前的线程的现场执行的上下文数据就要缓存起来以备切换回来时要能还原运行,而这些数据就要暂存到寄存中,如果线程数量过多,切换频繁,数据来回读写,那么当前进程的一堆线程执行性能就会慢慢下降,这些代码在执行的时候是执行机器指令,大家在源码里的代码虽然可能是一行,但是机器指令却是多条,执行到一半,cpu就切换到其线程中了,那当前线程执行到哪,现在的数据是什么总得存起来,以便后面切换时恢复,来回折腾这样好吗?寄存器不会发火吗?我劝年轻人耗子喂汁。来偷袭我上电好长时间的寄存器这不好。

多线程开得越多,cpu都忙在切换上面了,代码执行的时间就会越来越少,执行一条指令立马被人偷袭抢占切换,当前进程启动的多线程执行时间就会越来越少,等半天才执行几条指令,还原到各位写的源码估计一行都不到,估计你上来就是啪,把电脑砸了。

..............

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值