并发和并行
如下图所示:
单核上,严格意义上还是只执行一个线程,每个线程时间片占用的CPU时间片非常短,宏观上看还是串行的。
多核上,多个线程是在真正的同时执行
IO密集型和CPU密集型程序
IO密集型:
程序里的指令操作,涉及IO的一些操作,比如设备、文件、网络操作(等待客户端连接IO操作是可以把程序阻塞住的)
CPU密集型程序
程序里的指令操作都是用作计算的
线程池
线程的消耗
- 线程的创建和销毁都是非常"重"的操作
- 线程栈本身占用大量内存
- 线程的上下文切换要占用大量时间
- 大量线程同时唤醒会使系统经常出现锯齿状负载或者瞬间负载量很大导致宕机
线程池UML图