线程

------------恢复内容开始------------

  1. 如何看待地址空间和页表
  • 地址空间是进程看到的资源窗口
  • 页表决定,进程真正拥有资源的情况
  • 合理的对地址空间+页表进行资源划分,我们就可以对一个进程所有的资源进行分类
  1. 以4kb为单位来存储。
    需要12个比特位来表示这个4kb的偏移量

    页目录中使用了地址中前10位,然后页表中使用了10位,然后使用剩下的12位虚拟地址+页框中的起始地址

  2. 我们可以通过地址空间+页表方式对进程进行资源划分,单个“进程”执行粒度,一定要比之前的进程要细

  3. 在windows是真的有线程和进程的区别,但是linux中是使用同一种方式实现的。

  4. 什么叫进程?内核视角:承担分配系统资源的实体。
    一个进程内部会有多个执行流。

  5. 线程是:cpu调度的基本单位。

  6. linux内核中没有真正意义上的线程,linux是用进程pcb来模拟线程的,是一种完全属于自己的一套线程方案。

  7. 站在cpu的视角,每一个pcb,都可以称为轻量级进程

  8. linux线程是cpu调度的基本单位,而进程是承担系统资源的基本单位

  9. 进程用来整体申请资源,线程用来伸手向进程要资源

  10. Linux中没有真正的线程:

  • 优点:可靠高效
  1. os只认线程,用户(程序员)也只认线程
    linux无法提供创建线程的系统调用接口,只能给我们提供创建轻量级进程的接口
    所以会有thread库,来解决中间的问题

  2. 轻量级进程id:

  3. CPU调度的时候,是以lwp的这个表示一个特定的执行流。

  4. 一个线程如果出现了异常,也会影响到其他的线程的。(健壮性和鲁棒性比较差)。进程信号,信号是整体发给进程的。
    如果出错了,系统会找到这pid,然后吧这个进程都关闭了,那么其他线程就会一起被关闭,

  5. 线程传递有一种错误是

    传递了一个临时变量的char 数组。那么在下一次循环的时候,这个变量是在缓冲区,会被覆盖掉。

  6. 如果线程内先需要,

  7. 对于函数内定义的变量,都叫做局部变量,具有临时性 -- 今天仍然适用 --在多线程的情况下也是,每个线程都有自己的独立的栈结构

  8. 任何一个执行流调用exit都会整个进程退出。

  • pthread_exit()
  • return
  1. 需要经可能的让多个线程交叉执行
    多个线程交叉执行本质:就是让调度器尽可能的频繁发生线程调度与切换
    线程一般在时间片到了,来了更高优先级的线程,线程等待的时候
    线程从内核态返回用户态的时候,线程要对调度状态进行检测,如果可以,就直接发生线程切换

  2. 我们定义的全局变量,在没有保护的时候,往往是不安全的,像多个线程在交叉执行造成的数据安全问题,发生了数据不一致的问题。

  3. 提出方案:加锁

  • 多个执行流进行安全访问的共享资源-临界资源
  • 多个执行流中,访问临界资源的代码,--临界区
  • 想要多个线程串行访问共享资源 --互斥
  • 对一个资源进行访问的时候,要么不做,要么做完 --原子性

------------恢复内容结束------------

posted @   zhudachang  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示