基础概念
- CPU核心数和线程数的关系
对于一个CPU,线程数总是大于或等于核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。
- CPU时间片轮转机制
又称RR调度,会导致上下文切换
- 什么是进程和线程
进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源
线程:CPU调度的最小单位,必须依赖进程而存在。
- 澄清并行和并发
并行:同一时刻,可以同时处理事情的能力
并发:与单位时间相关,在单位时间内可以处理事情的能力
- 高并发编程的意义、好处和注意事项
好处:充分利用cpu的资源、加快用户响应的时间,程序模块化,异步化
风险:1、安全性问题:主要是多个线程共享数据时可能会产生于期望不相符的结果
2、活跃性问题(liveness):当某个操作无法继续进行下去时,就会发生活跃性问题。比如死锁、饥饿、活锁等问题。
3 性能问题
a.线程过多时会使得CPU频繁切换,花在调度上时间太多。
b.多线程环境必须使用同步机制,导致很多编译器想做的优化被抑制。
c.线程过多还会消耗过多内存
java里的线程
java里的程序天生是多线程
// 获取 Java 线程管理 MXBean ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); //不需要获取同步的 monitor 和 synchronizer 信息,仅获取线程和线程堆栈信息 ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false); //遍历线程信息,仅打印线程id和线程名称信息 for (ThreadInfo threadInfo : threadInfos) { System.out.println("[" + threadInfo.getThreadId() + "] " + threadInfo.getThreadName()); }