关于多线程的一些感想

以前的疑惑

    接触多线程也有段时间,实话说,自己其实根本没理解,Java的并发编程书籍也看了几本了,什么多线程设计模式,并发工具,线程池源码也都有所了解,一直还自我感觉还不错,但我在想一个问题,多线程是如何提升性能的?cpu同一时刻不是只能运行一个线程吗?如果是在单核的情况下,加上线程上下文切换的时间,那岂不是多线程比单线程还耗时,这些我一直没想通,直到今天得以解惑.

解惑

    让我得以解惑的重点,是关于执行任务的类型,分为CPU密集型和IO密集型.
其实我并不是今天才知道这个分类,相反,我很早就知道了,在上学校操作系统课程时就知道了,但这个知道,仅仅限于知道.
CPU密集型就是程序内容多是计算任务,IO密集型就是程序内容多是IO操作.
可以这么说,如果执行任务是纯粹的CPU密集型,单个线程的执行过程中没有任何阻塞,那么上面疑惑中的最后一问其实是对的,单核系统的这种情况下,多线程确实比单线程耗时多(理论上是,我还没测试,会尽快补上),但现实确不存在这样的情况,哪里有纯粹的CPU密集型程序,相反,很多程序中,IO操作会更多一些,耗时也占总程序的大部分,在线程执行时,IO操作势必会阻塞,这时,如果是单线程,整个CPU就只能等待,但是在多线程的情况下,就会切换到别的线程,这样省下等待的时间,多线程的效率就上来了.

猜你喜欢

转载自blog.csdn.net/qq_36865108/article/details/84490953