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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java私塾 java篇_Java私塾跟我学系列——JAVA篇 五、

五:Java如何做到让机器理解我们想要做的东西用一个图来描述这个过程会比较容易理解:1:编写代码首先把我们想要计算机做的事情,通过Java表达出来,写成Java文件,这个过程就是编写代码的过程。如上图所示的Hel…

java借口案例实现_java实现接口的典型案例

废话不多说,直接上代码package com.car;interface Carr{//汽车名称String getName();//获得汽车售价int getPrice();}class BMW implements Carr{public String getName(){return "BMW";}public int getPrice(){return 300000;}}class CheryQQ implements…

java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法

洛谷 P1016 旅行家的预算 Java解法洛谷 P1016 旅行家的预算 Java解法package com.two;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);double D1 sc.nextDouble();// 两个城市之间的距离double C …

java语言执行过程_Java程序的运行过程(执行流程)分析

万事知其然,要知其所以然,所以本节带大家来详细了解一下 Java 程序的执行过程。从《使用记事本编写运行Java程序》一节的案例可以看出,Java 程序的运行必须经过编写、编译和运行 3 个步骤。编写:是指在 Java 开发环境中进行程序代…

java smp_什么是SMP系统

SMP(Symmetric Multi-Processing),对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资…

php搭建云服务器,云服务器上如何搭建php环境

1) 安装libtool和libtool-ltdl[rootlocalhost mysql]# yum -y install "libtool*"[rootlocalhost mysql]# yum -y install "libtool-ltdl*"2) 手工修改gd库文件PHP 5.4 也有一些 Bug,在检测 gd 库时会报错,需要我们手工修改。命令如…

php实现文本替换,php 如何实现文字替换

php实现文字替换的方法:首先创建一个PHP示例文件;然后输入代码“str_replace("iwind", "kiki", "i love iwind, iwind said");”;最后输出执行结果即可。在php替换字符效率最高也是最简单字符替换函数str_repl…

php 删除指定html标签,php删除html标签的三种解决办法

分享下PHP删除HTMl标签的三种方法。方法1:直接取出想要取出的标记function strip($str){$strstr_replace("","",$str);//$strhtmlspecialchars($str);return strip_tags($str);}//edit by www.jbxue.com?>方法2.PHP 中有个 strip_tags 函数…

php加载autoload,php自动加载类__autoload()的方法_PHP教程

本文章来给大家简单的介绍一下关于php自动加载类__autoload()的方法,希望此方法对各位同学会有所帮助哦。作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部文件包含进来。但是,当要…

php http_user_agent 微信浏览器改变为其他浏览器,微信内置浏览器HTTP_USER_AGENT

随着微信的普及和微信公众号的营销日益增多,我们所面对的开发不再仅仅局限于传统的网站,微信开发也成为了我们程序猿的一项必修课程。我们可以借助微信开发者工具进行微信小程序和微信公众号网页开发,但是在微信公众号网页开发过程中&#xf…

达内php第三次月考,达内第三次月考

1. 下列不属于浏览器内置的对象的是:()A. navigatorB. documentC. windowD. request正确答案:D2. Servlet 可以存储数据的三个不同的作用域是()。A. 请求、会话和上下文B. 响应、会话和上下文C. 请求、响应和会话D. 请求、响应和上下文正确答案&#xff…

php与eCharts结合,23.安装php和echarts进行结合展示图表

$dbms‘mysql‘; //数据库类型$host‘192.168.86.131‘; //数据库主机名$dbName‘userdb‘; //使用的数据库$user‘sqoop‘; //数据库连接用户名$pass‘sqoop‘; //对应的密码$dsn"$dbms:host$host;dbname$dbName";$dbh new PDO($dsn, $user, $pass); //初始化一个PD…

java win10 通知,如何使用Java AWT创建和显示Windows 10通知

在Java中, 如何生成不同类型的通知或警报非常令人困惑。一些开发人员更喜欢使用JOptionPane, 但是当你在固定环境中工作时(例如在Windows 10中), 使用Windows的默认通知样式非常好, 因此这就是为什么我们向你展示一个简短的摘要来显示Java AWT轻松实现Windows 10通知。以下代码…

matlab枚举类型,在 Simulink 模型中使用枚举数据

计算中的枚举值按照设计,Simulink 不允许在数学计算中将枚举值作为数值使用,即使枚举类是 MATLAB int32 类的子类也是如此。因此,尽管枚举类型存在基础整数,也不能作为数值类型使用。例如,您不能直接为 Gain 模块输入枚…

mysql数据库表名批量改为小写,MySQL 批量修改表名

2018-12-04 15:33:19CocoaPods安装和使用教程当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他…

dataguard mysql,[dataguard同步数据库]Dataguard环境下数据库的备份与恢复

在线QQ客服:1922638专业的SQL Server、MySQL数据库同步软件在部署完active data guard后,不但可以将只读的查询交给备库执行,还可以把日常的数据库备份工作放在备库上执行,从而减轻主库的压力,充分的发挥服务器资源&am…

matlab求解helmholtz,MATLAB与科学计算(第2版)

第1章 安装及使用前的准备1.1 MATLAB 6.x简介1.1.1 21世纪的科学计算语言1.1.2 MATLAB的发展历史1.1.3 MATLAB 6.x的新特点1.1.4 MATLAB的应用和网上资源1.2 MATLAB 6.x的安装1.3 MATLAB的桌面平台1.3.1 启动MATLAB1.3.2 桌面平台1.4 帮助系统1.4.1 联机帮助系统1.…

php最简单漂亮的excel导出,php把数据表导出为Excel表的最简单、最快的方法(不用插件)...

header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filenamexls_region.xls");$cfg_dbhost localhost;$cfg_dbname testdb;$cfg_dbuser root;$cfg_dbpwd root;$cfg_db_language utf8;// END 配置//链接数据库$link mysq…

php getimagecompose,Docker进阶:Dockerfile以及docker-compose工具

Dockerfile:用来定制镜像的文件Docker-compose:用来部署容器集群的命令工具Dockerfile基本语法FROM:指定基础镜像,格式一般是FROM :FROM必须是Dockerfile的第一条非注释的命令是镜像名,是指定版本,不写的话…

oracle 数字类型行转列,oracle行转列

一、PIVOT实例1. 建表建立一个销售情况表,其中,year字段表示年份,quarter字段表示季度,amount字段表示销售额。quarter字段分别用Q1, Q2, Q3, Q4表示一、二、三、四季度。CREATE TABLE SalesByQuarter( year INT, -- 年份qu…