线程的一些零碎知识总结

1)内核级线程(KST):无论是系统进程还是用户进程,进程的创建和撤销,以及I/O操作都是利用系统调用进入到内核,由内核处理完成,所以说KST下,所有进程都是在操作系统的内核的支持下运行的,是与内核紧密相关的,内核空间实现还为每个内核支持线程设置一个线程控制块,内核根据该控制块而感知某个线程的存在,并加以控制
优点:
1)在多处理器上,内核可以调用同一个进程中的多个线程同时工作
2)如果一个进程中的线程阻塞啦,其他线程仍然可以得到运行
缺点:
对于用户线程的切换代价太大,在同一个线程中,从一个线程切换到另一个线程时,需要从用户态进入到内核态并且由内核切换,因为线程调度和管理在内核实现

2)用户级线程(ULT) :用户线程仅存在与用户空间内,对于这种线程的创建、撤销、线程之间的同步和通信等功能,都无需系统调用来实现,对于同一进程的线程之间的切换仍然是不需要内核支持的,所以,内核也会是完全不知道用户级线程的存在

注意:设置了用户级线程的系统,其调度仍然是以进程为单位进行的哦

优点:
线程的切换不需要切换到内核空间,节省了宝贵的内核空间;
调度算法可以是进程专用,用户进程进行指定
用户级线程实现和操作系统无关

缺点:
系统调用阻塞,同一进程中一个线程阻塞和整个进程都阻塞啦
一个进程只能在一个cpu上获得执行


3)java里的线程是有JVM来管理的,他如何对应到操作系统的线程是由jvm的实现来确定的,Linux的Hotspot虚拟机上,jvm线程跟内核轻量级线程有一一对应关系,线程的调度完全交给操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,java线程的实现方式属于内核线程的实现方式。


4)如果任务是计算密集型的,这个最小线程数就是我们需要的线程数,开辟更多的线程指挥影响程序的性能,因为线程之间的切换需要消耗额外的资源,如果任务是I/O密集型的任务,我们可以开辟更多的线程执行任务,当一个任务执行I/O时,线程将会阻塞,处理器立即会切换到另一个合适的线程去执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值