多线程与高并发简介

jvm篇中的jmm中讲解了内存管理这里不做过多解释

程序、进程、线程关系

程序:就是操作系统可执行的文件
		一个程序加载的时候首先从磁盘读取到内存,开辟一个内存空间,这个内存空间就是一个进程(一个程序可以有多个进程)
进程:资源分配的基本单位	
线程:是在进程之内,是调度执行的基本单位,多个线程共享资源

CPU性质

CPU密集性:大量的计算,不需要等待。
IO密集型:大多数时间在等待,完成后只需要简单的拷贝等就能完成。

先来考虑三个问题:
1、单核CPU设定多线程是否有意义?
2、工作线程数是不是设置的越大越好呢?
3、工作线程数(线程池中线程数)设多少合适
预规划:
	1、服务器的核心数(还需要考虑GC占用的线程,OS占用的线程,其他程序占用的线程)
    2、一般要预留出20%CPU
    3、理想情况下的公式:
   		N(thread) = N (cpu) *  U(cpu) * (1 + W/C)
   		N (cpu): 是处理器的核心数量;Runtime.getRuntime().availableProcessors()
   		U(cpu): 期望的CPU利用率
   		W/C : 等待时间与计算时间的比率
计算方式:
	1、利用程序调用时间自己计算分析
	2、profile工具;JProfile工具(收费);Arthas(阿里开源)
     假如1核CPU 计算占50%,另外等待占50%,设置两个比较合适,这样就可以让CPU利用率最高,而且减少线程之间的开销
压测:
	根据实际情况来评估出

线程

创建线程默认默认占用空间大小为1M。
那么线程怎么启动的呢?
线程有哪些状态呢?
线程如何中断呢?
线程如何结束呢?

并发

并发编程有哪些特性?
Synchronized锁升级过程是什么?
volatile解决了哪些问题?
常用的JDK工具有哪些?

AQS与CAS

AQS是什么?
CAS又是什么?
它们的存在的价值是什么?

集合

常见的集合有哪些?
List
Set
Queue
Map

线程池

ThreadPoolExecutor解决了哪些问题?如何使用?
Executors工具类定义了哪几种方式?
ForkJoinPool解决了哪类问题?如何使用?
ThreadPoolExecutor源码是如何实现的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值