线程概念及原理

        线程是CPU执行的最小单元,现在的CPU都是多核的,所以会多个核心同时执行多个CPU,这就是并发执行。

一、线程的执行原理

        每个线程就绪以后,都会获取CPU时间片来执行,若CPU繁忙,线程会进入阻塞状态,若一个时间片线程无法执行完,为了保证任务的连贯性,CPU会保存线程的状态,等待下次重新获得CPU时间片后,读取状态线程状态继续执行。线程的上下文切换,也指的就是线程状态的保存、读取、执行。频繁的线程上下文切换,也会消耗CPU的执行时间,降低性能,所以线程数并不是越多越好。

二、线程模型

        首先需要了解下,应用系统是无法直接访问CPU的,应用系统是运行在操作系统之上的。我们需知道应用系统、操作系统、硬件之间的关系。

        每个应用系统线程(用户线程)的执行,需要通过操作系统映射到一个操作系统线程(内核线程),通过内核线程去访问CPU等资源。

        现在的操作系统大多数都是多对多线程模型,如下图:多对多线程模型可实现线程的并发执行及内核线程的复用,极大的提高了CPU资源的使用率。实现原理:每个内核可以执行多个用户线程,多个用户线程可以在不同的内核线程上处理。同时需要注意的是,CPU的内核数是有上限的,所以不是内核线程越多,性能就越高,内核线程的创建也很消耗资源。           

三、多线程的应用

        多线程在操作同一个数据时,容易发生数据不一致问题,所以这个时候就需要使用互斥锁对需要操作同一个共享数据的多个线程进行同步。但互斥锁使用不当也会引发死锁。

        除此之外,多线程虽然能够提升应用程序的处理性能,但并不是线程多越就越快,当线程数远远高于CPU的核心数时,会导致频繁的线程上下文切换,上下文切换也会消耗CPU资源,并占用一定内存维护线程状态。

        锁一般分为互斥锁和共享锁,或者成为写锁和读锁,互斥锁一般用于多个线程对同一个数据进行写操作,共享锁则是多个线程对同一个数据进行读操作,所以共享锁的并发性能要高于互斥锁。除了使用锁之外,另一种方法是通过硬件的源原子指令来实现共享数据的一致性,具体软件层面的就是CAS机制。

        CAS机制的工作原理就是在一个原子操作中先完成对旧数据的检查,如果符合预期(即没有被其他线程修改),则进行更新操作。CAS机制不需要枷锁,或者说是一种乐观锁的实现方式,并发性好于互斥锁。

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值