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内核调度的最小单元。


断水流大师兄
6 声望0 粉丝