多线程学习第一课

1、课程三问 - 学前:

a、为什么需要多线程? 同一个进程内部可能存在多个不同的task,这些task需要共享进程的数据,但是这些task操作的数据又有一定的独立性,不需要多个task按照时许执行,因此就产生了线程的概念。b、多线程是什么 多线程是相对于进程说的,多个线程共同组成了进程,线程是进程的一个个粒度单元,他们彼此独立。c、多线程有什么优势、带来什么问题 1、优点 由于多线程之间不需要按照时许进行,所以多线程可以降低时间复杂度。支持并发编程。 2、缺点 线程安全问题、频繁的上下文切换。

2、学习中疑惑点:
a、线程是否是最小粒度? b、频繁的上下文切换带来了什么问题? c、多线程是否一定比进程快?

【多线程学习第一课】多线程学习第一课
文章图片

3、解惑:
a、线程是否是最小粒度? 答:后来想了想,这个问题还挺傻的。因为子线程也可以拥有自己的子线程,那线程应该是进程的最小粒度。上图三个线程共同组成了一个进程,Thread 1也可以有自己的子线程。b、频繁的上下文切换带来了什么问题? 答:如上图:1->2->3->4->5,描述了一个线程a切换到另外一个线程b的过程。如果两个线程共同访问了并修改了进程公共数据变量x,那在a修改了x变量后,还需要同步到b线程的私有缓存L1/L2。频繁的切换,这就带来了缓存一致性问题。同时切换是CPU内核的切换,也就带来了性能的消耗。所以上下文切换是一个拿性能换取时间的过程。c、多线程是否一定比进程快? 答:不是的,如果一个进程只有很少的进程数,那可能上下文切换的时间大于单线程执行的时间了。

4、总结:
a、多线程提高了多核cpu的利用率,同时带来了性能的消耗以及线程安全、资源竞争、死锁等问题。b、线程是cpu内核调度的最小单元。

    推荐阅读