第 1 章 多线程基础介绍
https://docs.oracle.com/cd/E19253-01/819-7051/index.html
1. Lightweight process(轻量进程) 用来执行内核代码和系统调用的内核线程,又称作 LWP。
一般来说内核只有进程,为了提高效率搞了一个轻量级进程,只用于内核调度。轻量级进程 = 内核线程!
2. 使用多线程的优点
① 提高交互体验
比如交互操作,不用等待其他进程处理完毕再响应,而是可以立刻响应;
多线程思想类似进程的分时调度,其实提高了短任务的执行效率,但是又不像进程开销那样大!
② 充分利用CPU
上面①即使在CPU在满负荷的时候也成立,这里要说CPU一般情况下,也就是非满负荷。
假如一个进程要做好几件事,一件事情阻塞了,多线程可以切换到其他事情,不至于CPU空等,提高了CPU利用率
③ 多CPU可以同时执行多个线程
多CPU情况下,同一进程内的多个线程可以在多个CPU上同时执行,这时CPU调度的单位变成了线程!
这更加减小了CPU空载的概率,提高了CPU的利用效率。
总之,可以从CPU是否满负荷来书分为两个方面,也可以从单核多核CPU来说提高CPU利用效率。
3. 多个CPU是如何同时执行多线程的?可以同时执行多个进程吗?

多个线程共享一些资源,这些资源个管理只需要一个MMU,所以多核一定可以同时执行多个线程;
假如是类似Intel的Core系列,每个CPU都有自己的Cache和MMU,还可以同时执行多个进程!
4. 线程的joinable和detached
① pthread_join(): 在linux中主线程会调用该函数,用来等待子线程完成再退出,并在之后执行子线程的资源清理工作(pthread_join()本身不会清理资源)
② detached: 有时候假如不需要资源回收,比如“需要重用线程ID和其他资源”,或者“子线程本身执行清理资源的工作”,就不需要执行该函数,这时我们把线程属性设置为detached
缺省线程都是非分离的,我们可以使用函数设置线程属性为detached:
pthread_attr_t attr;pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);5. 多线程信号
本文来自博客园,作者:moonのsun,转载请注明原文链接:https://www.cnblogs.com/moon-sun-blog/p/15873992.html

浙公网安备 33010602011771号