第 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. 多线程信号

 

posted @ 2022-02-09 10:31  moonのsun  阅读(44)  评论(0)    收藏  举报