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内核调度的最小单元。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。