乐趣区

关于多线程:多线程学习第一课

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 内核调度的最小单元。
退出移动版