线程发展史
面试题
程序:在硬盘中,是os可执行文件
进程:一个程序对应多个进程,是os进行资源分配的基本单位
线程:调度执行的基本单位。多个线程程之间共享同一个进程的资源。(os有线程调度算法)
多线程:一个程序的不同的执行路径同时执行。
cpu包含ALU(计算单元)、Registers(寄存器组)、PC(程序计数器programm counter)
数据放寄存器组、指令放在pc
当线程T1执行时间到了,就把T1的数据、指令放入cache(缓存)中,再把线程T2的指令和数据放入CPU。这个叫线程切换,由os管理,也要消耗资源。
cpu只管算,os管理数据、指令是哪个线程的。
多线程目的:充分利用cpu
通常一个任务不光 cpu 上要花时间, io 上也要花时间(例如去数据库查数据,去抓网页,读写文件等)。 一个进程在等 io 的时候, cpu 是闲置的,另一个进程正好可以利用 cpu 进行计算。 多几个进程一起跑,可以把 io 和 cpu 都跑满了。
线程切换,由os管理,也要消耗资源,因此不是越大越好。
采用方法就是不断地调试,一般有多少核就设置多少个线程。但首先,java程序本身就会开启很多线程。其次,不止一个程序运行。而且,根据服务安全的角度,要让cpu留点余量,要留20%,其实最好根据压力测试。
1)因为多线程需要开辟内存,而且线程切换需要时间因此会很消耗系统内存。
2)线程的终止会对程序产生影响
3)由于多个线程之间存在共享数据,因此容易出现线程死锁的情况
4)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。
一般怎么抉择多少个线程?
这个公式问题是怎么知道W/C.
答:需要工具测算。
工具测算------Profiler(性能分析工具的统称)
1、本地工具JProfiler—收费
2、远程工具Arthas
线程
1、IO密集型2、计算密集型