前段时间看了操作系统线程那章,对多线程有了新的认识,重新思考了多线程在开发中的使用。
为什么要使用多线程,多线程编程的目的就是最大限度地利用CPU资源,当某一线程在等待I/O等资源操作完成出现阻塞时,让其它需要占用CPU资源的线程有机会获得CPU资源。多进程技术同样也可以做到这一点,但是创建一个进程开销太大,进程间通信不方便,加上进程切换时间太长,所以导致了多线程(线程也称为轻量级进程)的出现。
对于单核CPU来说,在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程(进程至少有一个主线程)或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略切换其他线程执行。但是这种线程间的切换是有cpu开销的,而这种开销对于任务来说是无效的。同时在同一进程内的所有线程是可以共享的资源,在多线程中还需考虑资源共享、数据独占、互斥量等一系列问题。所以两个线程执行完成一个任务(每个线程完成一个)所需要的时间比一个线程执行完成两次所需要的时间要多一些(多的时间发生在线程间切换开销上)。所以采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间,因为时间片很短,这样给用户的感觉是有多个线程在同时执行。
所以对于有慢速I/O访问需求的应用程序,多线程要优于单线程。最典型的情况就是数据库请求处理这块,可以采用N个DB线程,一个逻辑线程的架构。而对于主要消耗CPU运算资源的业务逻辑应用程序,尽量采用单线程,这样能更大发挥cpu的运算能力。
多线程的理解
最新推荐文章于 2024-07-26 14:20:58 发布