首页  »   操作系统

多线程的了解

网友分享于:2015-08-26  浏览:3次
多线程的理解

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

1 楼 yangy608 昨天  
这也能上首页?javaeye自从被收购后,这水平是直线下降啊,马上估计就没人来了
2 楼 完善自我 昨天  
讲到了重点,挺好!
3 楼 gfdice 昨天  
跪了,这也能上javaeye首页?二本大一的人都知道的事情。
4 楼 lazy_ 昨天  
虽然简短,但是总结的很好! 
5 楼 dmh920 昨天  
gfdice 写道
跪了,这也能上javaeye首页?二本大一的人都知道的事情。

怎么说呢,大学生计算机专业的童鞋是应该都要知道这些东西,当时在学校的时候我也知道,但是没有去深究,但是在实际工作中遇到使用多线程的时候才发现这些并不是仅仅是自己以前理解的那样。在实际项目中我们业务逻辑服务器是采用单线程实现的,尽量避免添加新的线程,如果有新功能要上而单线程实在是满足不了需求的时候才考虑添加新的线程,而用户数据服务器却是开了好几条线程与db交互,另外db对I/O性能比cpu要求更高。这些都是以前也看到过,也听别人说过,但那也是走马观花自己体会不深。自己经历了重新回过头来看一次,再结合实际情况又有了新的体会,更深层次的领悟。

相关解决方案

最新解决方案