javajoin方法怎么使用 cpu多线程和jvm多线程?

[更新]
·
·
分类:互联网
5002 阅读

javajoin方法怎么使用

cpu多线程和jvm多线程?

cpu多线程和jvm多线程?

一 cpu个数、核数、线程数的关系
cpu个数:是指物理上,也及硬件上的核心数;
核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;一个CPU核心数模拟出2线程的CPU
线程数:是同一时刻设备能并行执行的程序个数,线程数cpu个数 * 核数,及程数cpu个数(2) * 核数(2)4
Windows: wmic 然后 物理CPU数 “cpu get NumberOfCores”, CPU核心数 “cpu get NumberOfLogicalProcessors”
Linux:
查看CPU个数 cat /proc/cpuinfo| grep #34physical id#34| sort| uniq| wc -l
查看核数 cat /proc/cpuinfo| grep #34cpu cores#34| uniq
二 cpu线程数和Java多线程
(1) 线程是CPU级别的,单个线程同时只能在单个cpu线程中执行
(2) Java多线程并不是由于cpu线程数为多个才称为多线程,当Java线程数大于cpu线程数,操作系统使用时间片机制,采用线程调度算法,频繁的进行线程切换。
(3) 线程是操作系统最小的调度单位,进程是资源(比如:内存)分配的最小单位
(4)Java中的所有线程在JVM进程中,CPU调度的是进程中的线程
线程的调度是指按照特定的机制为多个线程分配CPU的使用权。有两种调度模型:分时调度模型和抢占式调度模型
分时调度模型是指让所有线程轮流获得CPU的使用权,并且平均分配每个线程占用CPU的时间片。
Java虚拟机采用抢占式调度模型,是指优先让可运行池中处于就绪态的线程中优先级高的占用CPU,如果可运行池中线程的优先级相同,那么就随机选择一个线程,使其占用CPU,处于运行状态的线程会一直执行,直至它不得不放弃CPU,一个线程会因为以下原因放弃CPU:
(1)Java虚拟机让当前线程暂时放弃CPU,转到就绪态,使其他线程获得运行机会
(2)当前线程因为某些原因而处于阻塞状态
(3)线程运行结束
Java线程让步:
3. Thread.yield()方法
就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行(根据CPU的调度),并不是单纯的让给其他线程。
4.等待其他线程结束:join()
当前运行的线程可以调用另一个线程的join()方法,当前运行的线程将转到阻塞状态,直至另一个线程运行结束,它才会恢复运行(阻塞恢复到就绪)

mysqlleftjoin会影响数据库性能吗?

只要索引使用得当,简单的left join是不会影响数据库查询性能的,但有几种情况要特殊考虑下:
1. 联表查询涉及到的表超过了3个,最好不要使用join,这是《阿里巴巴Java开发规范》明确说明的。
2. 涉及到分库分表的,也要慎用join(多表join一时爽,垂直拆分火葬场)
在平时的开发中,我一般的做法是能不用join就不用join,能使用Redis和本地缓存的就使用Redis和本地缓存,尽量避免因复杂的SQL运算造成数据库查询性能降低的操作。

数据库的性能不是SQL影响的,你SQL执行的性能取决于SQL写的是否正确,数据库的性能也会影响到你SQL的执行效率,同样的SQL,如果数据库单表500w的数据量,inodb_buffer_pool_size大的,在同等条件下肯定效率高,left join会在一定程度上影响,如果一条SQL有太多的left join如果没有很好的索引,那么基本上性能就会很差,关联字段要建立正确的索引,数据库内存再大一点,,一个SQL两三个leftjoin也是可以的,没有多大问题