首页 > 其他分享 >线程

线程

时间:2024-10-18 12:02:20浏览次数:6  
标签:-- 线程 页表 linux 进程 资源

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

  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. 提出方案:加锁

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

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

标签:--,线程,页表,linux,进程,资源
From: https://www.cnblogs.com/zhudachang/p/18473969

相关文章

  • 多线程(五):死锁&内存可见性问题
    目录1.synchronized---监视器锁monitorlock2.死锁2.1死锁---情况12.1.1可重入2.1.2 如何实现一个可重入锁[面试题]2.2死锁---情况22.2.1BLOCKED2.2.2手写死锁代码[经典面试题]2.3 死锁---情况33.避免死锁的出现3.1构成死锁的四个必要条件★......
  • 【Linux线程】Linux多线程编程:深入理解线程互斥与同步机制
    ......
  • 线程安全、synchronized和volatile关键字
    一、什么是线程安全?多线程下并发同时对共享数据进行读写,会造成数据混乱=线程不安全当多线程并发访问临界资源时,如果破坏其原子性、可见性、有序性,可能会造成数据不一致。临界资源:共享资源(同一对象)同时读写,一次仅允许一个线程使用,才可保证其正确性。1.1synchronizedsync......
  • Java-三种线程的实现方式
    1.继承Thread类可以通过创建一个新的类继承Thread类,并重写其run方法来实现线程。classMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("线程运行中:"+Thread.currentThread().getName());//线程要执行的代码......
  • 线程和进程解释和创建
    一、含义:进程:是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源。举例:IDEA,阿里云盘,wegame,steam线程:是进程中的单个顺序控制流,是一条执行路径一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序。......
  • C#线程6---并发集合
    简介:   编程需要对基本的数据结构和算法有所了解。程序员为并发情况选择最合适的数据结构,那就需要知道很多事情,例如算法运行时间、空间复杂度,以及大写0标记法等。在不同的广为人知的场景中,我们总知道哪种数据结构更高效。对于并行计算,我们需要使用适当的数据结构。这些数......
  • IO、进程/线程、同步/异步、阻塞/非阻塞
    IO(Input/Output)IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首......
  • Java多线程编程:深入理解与实践
    java笔记,点击下载在现代软件开发中,多线程编程已成为提高程序性能和响应能力的关键技术之一。Java作为一门高级编程语言,提供了丰富的多线程支持,使得开发者能够轻松地编写并发程序。本文将深入探讨Java多线程的基本概念、实现方式以及最佳实践。多线程的基本概念多线程是指......
  • 一个月学会Java 第20天 多线程
    Day20多线程线程,很重要的概念,因为我们的CPU假如是intel或者amd的都是说一核二线程,假如你的电脑是8核的cpu那基本上就是16线程,如果你的mac的M芯片自然是几核就是几线程。想要查看自己的电脑是几个线程的我们有几种方法,一种直接使用Java运行一串代码,其次我们可以看任务管......
  • 【Linux】进线程间通信之消息队列
    二、消息队列1.什是消息队列​在Linux中,进程间通信(IPC)的消息队列是一种在进程之间传递数据的机制。它允许不同的进程以异步的方式发送和接收消息。2.消息队列的特点消息队列可以实现多个进程之间的通信,一个进程可以向消息队列发送消息,而另一个进程可以从消息队列中......