栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程与高并发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程与高并发

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源码是如何实现的?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336934.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号