【操作系统】第六话·线程是进程的(宝ᴗ宝)嘛?_跨进程的用户级线程调度也不需要内核参与-程序员宅基地

技术标签: 多对一模型  进程  线程  操作系统  # 【叁】操作系统·闪耀计划  多线程模型  

写在前面


Hello大家好啊,我是kikokingzz,名字太长不好记,大家可以叫我kiko哦~

从今天开始,我们将要开启一个新的系列【闪耀计划】,没错!这是今年上半年的一整个系列计划!本专题目的是通过百天刷题计划,通过题目和知识点串联的方式完成对计算机操作系统的复习和巩固;同时还配有专门的笔记总结和文档教程哦!想要搞定,搞透计算机操作系统的同学,本专栏将会通过模块化的分类,刷够1000道题,为大家提供点对点的考点相关知识轰炸!值得注意的是,本专栏将会通过教程+课后习题的方式来进行巩固教学,课后习题的题量也是算入总题数的哦!

订阅本专栏,将为你带来最一手的备战秘籍!

博客主页:kikoking的江湖背景


往期必看

【闪耀计划】第一话· 操作系统的基本概念

【闪耀计划】第二话·现代操作系统的前世今生

【闪耀计划】第三话·操作系统运行环境的层层细节

【操作系统】第四话·进程和程序究竟有啥区别?

【操作系统】第五话·进程的切换与控制·到底有啥关系?

目录

写在前面

知识点9:线程与多线程模型

9.1 线程的概念

1.什么是线程?

2.为什么要引入线程?

3.线程与进程有什么区别?

4.线程有哪些属性?

习题检测

9.2 线程切换与控制

1.线程状态与切换

2.线程的组织与控制

9.3 线程的实现方式与对应模型

1.用户级线程(ULT)

2.内核级线程(KLT)

3.组合方式

4.线程库

习题检测

写在最后

热爱所热爱的, 学习伴随终生,kikokingzz与你同在!❥(^_-)

知识点9:线程与多线程模型

9.1 线程的概念


1.什么是线程?

我们可以把线程理解为“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,它不拥有系统资源,只拥有一点运行中必可不少的资源,但它可与同属一个进程的其他线程共享进程的全部资源

一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并发执行,由于线程之间的相互制约,致使线程中出现间断性。线程也有就绪、阻塞、运行三种基本。


2.为什么要引入线程?

引入进程的目的:更好地使多道程序并发执行,提高资源利用率和系统吞吐量。

引入线程的目的:减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ 视频、文字聊天、传文件)。


3.线程与进程有什么区别?

(1)调度

进程:传统操作系统中,拥有资源和独立调度的基本单位都是进程,每次调度都要进行上下文切换,开销较大。

线程:线程是独立调度的基本单位,线程切换的代价远低于进程。在同一进程中,线程的切换不会引起进程切换,但从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。

(2)并发性

引入线程的操作系统中,不仅进程之间可以并发执行,而且一个进程中的多个线程之间亦可并发执行,甚至不同进程中的线程也能并发执行,从而使操作系统具有更好的并发性,提高了系统资源的利用率和系统吞吐量。

(3)拥有资源

进程:进程是系统中拥有资源的基本单位。

线程:线程不拥有系统资源,但线程可以访问其隶属进程的系统资源,这主要表现在属于同一进程的所有线程都具有相同的地址空间

PS:如果线程是拥有资源的单位,那么切换线程就需要较大的时空开销,这样的话,线程这个概念的提出就没有意义了。

(4)独立性

进程:每个进程都拥有独立的地址空间和资源,除了共享全局变量,不允许其他进程访问。

线程:某进程中的线程对其他进程不可见,同一进程中的不同线程共享进程的地址空间和资源。

(5)系统开销

进程:在创建或撤销进程时,系统要为之分配或回收PCB及其他资源,操作系统为此所付出的开销,明显大于创建或撤销线程时的开销。

线程:线程切换时只需保存和设置少量寄存器内容,开销很小;由于同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步和通信非常容易实现,甚至无须操作系统的干预。

(6)支持多处理机系统

单线程进程:不管有多少处理机,进程只能运行在一个处理机。

多线程进程:可以将进程中的多个线程分配到多个处理机上执行。


4.线程有哪些属性?

看似线程有很多属性,其实我们可以把线程理解为“轻量级进程”,那么进程所拥有的属性它基本都有,但是线程与进程的唯一区别就在于,线程是不拥有系统资源的,但它是处理机调度的单位;进程是系统中拥有资源的基本单位。

习题检测


091.题目难度 ️️

091.【2012统考真题】下列关于进程和线程的叙述中,正确的是( )。
A.不管系统是否支持线程,进程都是资源分配的基本单位
B.线程是资源分配的基本单位,进程是调度的基本单位
C.系统级线程和用户级线程的切换都需要内核的支持
D.同一进程中的各个线程拥有各自不同的地址空间

详细题解:

A/B:在引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。

C:在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预。

D:同一进程中的各个线程共享进程的地址空间。

正确答案:A


092.题目难度 ️️

092.下面的叙述中,正确的是( )。
A.线程是比进程更小的能独立运行的基本单位,可以脱离进程独立运行
B.引入线程可提高程序并发执行的程度,可进一步提高系统效率
C.线程的引入增加了程序执行时的时空开销
D.一个进程一定包含多个线程

详细题解:

A:线程是进程内一个相对独立的执行单元,不能脱离进程单独运行,只能在进程中运行。

B/C:引入线程是为了减少程序执行时的时空开销。

D:一个进程可能包含一个或多个线程。

正确答案:B


093.题目难度 ️️

093.下面的说法中,正确的是( )。
A.不论是系统支持的线程还是用户级线程,其切换都需要内核的支持
B.线程是资源分配的单位,进程是调度和分派的单位
C.不管系统中是否有线程,进程都是拥有资源的独立单位
D.在引入线程的系统中,进程仍是资源调度和分派的基本单位

详细题解:

A:在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预。

B/C/D:线程是调度的基本单位,进程是资源分配的基本单位。

正确答案:C


094.题目难度 ️️

094.下面的叙述中,正确的是( )。
A.同一进程内的线程可并发执行,不同进程的线程只能串行执行
B.同一进程内的线程只能串行执行,不同进程的线程可并发执行
C.同一进程或不同进程内的线程都只能串行执行
D.同一进程或不同进程内的线程都可以并发执行

详细题解:

同一进程内的线程间的可以直接切换,并发度较高,不同进程内的线程间,由于需要涉及到进程切换,因此切换的代价会高一些。

正确答案:D


 095.题目难度 ️️

095.下列关于线程的叙述中,正确的是( )。
A.线程包含CPU现场,可以独立执行程序
B.每个线程有自己独立的地址空间
C.进程只能包含一个线程
D.线程之间的通信必须使用系统调用函数

详细题解:

A:线程是处理机调度的基本单位,当然可以独立执行程序。

B:线程没有自己独立的地址空间,它共享其所属进程的空间。

C:进程可以创建多个线程。

D:同一进程内的线程之间的通信可以直接通过它们共享的存储空间,不涉及系统调用。不同进程内的线程之间的通信,必须要使用系统调用函数来实现通信。

正确答案:A


 096.题目难度 ️️️

096.在以下描述中,( )并不是多线程系统的特长。
A.利用线程并行地执行矩阵乘法运算
B.Web服务器利用线程响应HTTP请求
C.键盘驱动程序为每个正在运行的应用配备一个线程,用以响应该应用的键盘输入
D.基于GUI的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作

详细题解:

适合用多线程解决的业务场景有:

  • (1)可以将处理逻辑拆分成多个互不相干的部分
  • (2)计算量较大,需要高并发。

A:矩阵乘法可以拆分为多个线程分别进行“行*列”的计算。

B:利用多个线程进行处理HTTP请求,可以节约获得响应的时间。

C:整个系统只有一个键盘,而且键盘输入是人的操作,速度比较慢,完全可以使用一个线程来处理整个系统的键盘输入。

D:满足线程解决的任务场景(1)的情况。

正确答案:C

我是分割线

9.2 线程切换与控制


1.线程状态与切换

与进程一样,各线程之间也存在共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时也具有下面三种基本状态。

  • 执行状态:线程已获得处理机而正在运行。
  • 就绪状态:线程已具备各种执行条件,只需再获得CPU便可立即执行。
  • 阻塞状态:线程在执行中因某事件受阻而处于暂停状态。

线程这三种基本状态之间的转换和进程基本状态之间的转换是一样的。


2.线程的组织与控制

(1)线程控制块TCB

与进程类似,系统也为每个线程配置一个线程控制块TCB,用于记录控制和管理线程的信息。

同一进程中的所有线程都完全共享进程的地址空间和全局变量。各个线程都可以访问进程地址空间的每个单元,所以一个线程可以读、写或甚至清除另一个线程的堆栈。

(2)线程的创建

线程也是具有生命期的,它由创建而产生,由调度而执行,由终止而消亡。相应地,在操作系统中就有用于创建线程和终止线程的函数(或系统调用)。

用户程序启动时,通常仅有一个称为“初始化线程”的线程正在执行,其主要功能是用于创建新线程。在创建新线程时,需要利用一个线程创建函数,并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小、线程优先级等。线程创建函数执行完后,将返回一个线程标识符。

(3)线程的终止

当一个线程完成自己的任务后,或线程在运行中出现异常而要被强制终止时,由终止线程调用相应的函数执行终止操作。但是有些线程(主要是系统线程)一旦被建立,便一直运行而不会被终止。

通常,线程被终止后并不立即释放它所占有的资源,只有当进程中的其他线程执行了分离函数后,被终止线程才与资源分离,此时的资源才能被其他线程利用。被终止但尚未释放资源的线程仍可被其他线程调用,以使被终止线程重新恢复运行。


 097.题目难度 ️️️

097.【2011统考真题】在支持多线程的系统中,进程Р创建的若干线程不能共享的是( )。
A.进程Р的代码段
B.进程Р中打开的文件
C.进程P的全局变量
D.进程Р中某线程的栈指针

详细题解:

进程中的线程共享进程内的全部资源,但进程中某线程的栈指针对其他线程是透明的,不能与其他线程共享。

正确答案:A


098.题目难度 ️

098.下面的叙述中,正确的是( )。
A.引入线程后,处理器只能在线程间切换
B.引入线程后,处理器仍在进程间切换
C.线程的切换,不会引起进程的切换
D.线程的切换,可能引起进程的切换

详细题解:

在同一进程中,线程的切换不会引起进程的切换。当从一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换。因此线程的切换,可能会引起进程的切换。

正确答案:D


099.题目难度 ️️

099.下列说法中,不正确的是( )。
A.一个进程可以创建一个或多个线程
B.一个线程可以创建一个或多个线程
C.一个线程可以创建一个或多个进程
D.一个进程可以创建一个或多个进程

详细题解:

进程可以创建进程或线程,线程也可以创建线程,但线程不能创建进程。

正确答案:C

 我是分割线

9.3 线程的实现方式与对应模型


线程的实现可以分为两类:用户级线程(ULT)内核级线程(Kernel-Level Thread)

1.用户级线程(ULT)

在用户级线程中,有关线程管理的所有工作都由应用程序在用户空间中完成,内核是无法意识到线程的存在的。应用程序可以通过使用线程库,设计为多线程程序。通常应用程序从单线程开始,在该线程开始运行的任何时刻,可以通过调用线程库中的派生例程,创建一个在相同进程中运行的新线程

对应模型:(多对一模型)

将多个用户级线程映射到一个内核级线程,线程的调度和管理在用户空间完成。

Q1:用户级线程的调度单位是什么?对线程的调度公平吗?

A1:用户级线程的调度单位是以进程为单位进行的,各个进程轮流执行一个时间片。上图中,进程A包含2个用户级线程,进程B包含1个用户级线程,这样进程B中线程的运行时间就是进程A中各线程运行时间的2倍,因此对线程来说实质上是不公平的。

优点:

  1. 线程切换在用户空间即可完成,不需要切换到内核态,节省了两态切换的开销。
  2. 调度算法可以是进程专用的,不同进程可根据自身需要,对自己的线程选择不同的调度算法。

缺点:

  1. 当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。
  2. 多个线程不可在多核处理机上并行运行,这是因为用户级线程的调度单位是进程,一个进程只能被分配一个CPU。
100.在多对一的线程模型中,当一个多线程进程中的某个线程被阻塞后,( )。
A.该进程的其他线程仍可继续运行
B.整个进程都将阻塞
C.该阻塞线程将被撤销
D.该阻塞线程将永远不可能再执行

在多对一模型中,由于只有一个内核级线程,操作系统内核是看不到用户级多线程的,它只能感知到一个调度单位的存在。因此该进程的一个线程被阻塞后,该进程就被阻塞,进程的其他线程当然也都被阻塞;本题正确答案:B


2.内核级线程(KLT)

在内核级线程中,线程管理的所有工作是在内核空间中实现的。内核空间也为每个内核级线程设置一个线程控制块,内核根据该控制块感知某线程的存在,并对其加以控制。

对应模型:(一对一模型)

将每个用户级线程映射到一个内核级线程。

优点:

  1. 能发挥多处理机的优势,内核能同时调度同一进程中的多个线程并发执行。
  2. 如果进程中的一个线程被阻塞,内核可以调度该进程中的其他线程占用处理机。
  3. 内核级线程间切换比较快,开销小。

缺点:

  1. 同一进程中的线程切换,需要从用户态转到内核态进行,系统开销较大;这是因为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的。

101.题目难度 ️️

101.【2019统考真题】下列关于线程的描述中,错误的是( )。
A.内核级线程的调度由操作系统完成
B.操作系统为每个用户级线程建立一个线程控制块
C.用户级线程间的切换比内核级线程间的切换效率高
D.用户级线程可以在不支持内核级线程的操作系统上实现

详细题解:

A:应用程序没有进行内核级线程管理的代码,只有一个到内核级线程的编程接口,内核为进程及其内部的每个线程维护上下文信息,调度因此也是由操作系统内核完成。

B:在多线程模型中,用户级线程和内核级线程的连接方式分为“多对一”、“一对一”、“多对多”,操作系统为每个用户级线程建立一个线程控制块属于“一对一”模型

C:用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助调度,涉及两态切换。

D:用户级线程的管理工作可以只在用户空间中进行,因此可以在不支持内核级线程的操作系统上实现。

正确答案:B


3.组合方式

在组合方式中,内核支持多个内核级线程的建立、调度和管理,同时允许用户程序建立、调度和管理用户级线程。一个内核级线程对应多个用户级线程,这是用户级线程通过时分多路复用内核级线程实现的。

对应模型:(多对多模型)

将n个用户线程映射到m个内核级线程上,要求(n>=m);如下图所示,将3个用户级线程映射到2个内核级线程上。

优点:

  1. 同一进程中的多个线程可以同时在多处理机上并行执行,提高了并发度。
  2. 在阻塞一个进程时,不需要将整个进程阻塞。
  3. 克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。

4.线程库

线程库(thread library)是为程序员提供创建和管理线程的API,其主要有两种方式实现:

(1)用户空间的库

在用户空间中提供一个没有内核支持的库,这种库的所有代码与数据结构都位于用户空间,调用库中的函数,只导致用户空间中的一个本地函数的调用。

(2)内核空间的库

在内核空间提供一个操作系统直接支持的内核级的库,这种库的所有代码与数据结构都位于内核空间,调用库中的一个API函数通常会导致对内核的系统调用。


102.系统动态DLL库中的系统线程,被不同的进程所调用,它们是( )的线程。
A.不同
B.相同
C.可能不同,也可能相同
D.不能被调用

DLL是一个包含“可由多个程序同时使用的”代码和数据的库。当多个程序使用同一个函数库时,DLL中的同一个系统线程,可以被不同的进程所调用,进而降低在磁盘和物理内存中加载的代码的重复量;本题答案:B

习题检测


103.题目难度 ️️️

103.下面关于用户级线程和内核级线程的描述中,错误的是( )。
A.采用轮转调度算法,进程中设置内核级线程和用户级线程的效果完全不同
B.跨进程的用户级线程调度也不需要内核参与,控制简单
C.用户级线程可以在任何操作系统中运行
D.若系统中只有用户级线程,则处理机的调度对象是进程

详细题解:

A:用户级线程的调度单位是进程,而内核级线程的调度单位是线程,对于用户级线程,一个进程只能被分配一个CPU,即同一时刻只能1个线程使用;而对于内核级线程来说,内核能同时调度同一进程中的多个线程并发执行,效果当然不同。

B:由于此处涉及到了跨进程,因此就会发生进程切换,进程切换是需要内核参与的。例如下图中进程A的线程刚结束完,要调度进程B中的线程,此时就需要操作系统负责进程切换。

C:用户级线程的管理工作可以只在用户空间中进行,因此可以在任何操作系统上运行。

D:用户级线程的调度单位就是进程。

正确答案:B


104.题目难度 ️️️

104.在内核级线程相对于用户级线程的优点的如下描述中,错误的是( )。
A.同一进程内的线程切换,系统开销小
B.当内核线程阻塞时,CPU将会调度同一进程中的其他内核线程执行
C.内核级线程的程序实体可以在内核态运行
D.对多处理器系统,核心可以同时调度同一进程的多个线程并行运行

详细题解:

A:在内核级线程中,同一进程中的线程切换,需要从用户态转到核心态进行,系统开销较大。

B:如果进程中的一个线程被阻塞,内核可以调度该进程中的其他线程占用处理机。

C:如上图所示,当然正确。

D:CPU调度是在内核进行的,在内核级线程中,调度是在线程一级进行的,因此内核可以同时调度同一进程的多个线程在多CPU上并行运行。

正确答案:A


105.题目难度 ️️️

105.在用户级线程相对于内核级线程的优点的如下描述中,错误的是( )。
A.一个线程阻塞不影响另一个线程的运行
B.线程的调度不需要内核直接参与,控制简单
C.线程切换代价小
D.允许每个进程定制自己的调度算法,线程管理比较灵活

详细题解:

A:进程中的某个用户级线程被阻塞,则整个进程也被阻塞,即进程中的其他用户级线程也被阻塞。

B/C:用户级线程的调度是在用户空间进行的,节省了模式切换的开销。

D:不同进程可以根据自身的需要,对自己的线程选择不同的调度算法。

正确答案:A

写在最后


计算机操作系统世界是相当丰富的,内容方向繁多,但只要一步一个脚印,跟随【闪耀计划】吃透、搞懂、拿捏住操作系统内容是完全没有问题的!后期该系列还会有视频教程和经验分享,关于更多这方面的内容,请关注本专栏哦!

热爱所热爱的, 学习伴随终生,kikokingzz与你同在!❥(^_-)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_54151955/article/details/123444446

智能推荐

JScript 是 JavaScript 的缩写吗?_javascript的小写缩写是?-程序员宅基地

文章浏览阅读3.3k次。JScript 是 JavaScript 的缩写吗? 资策会数字教育研究所讲师 杨宏文  很多人都误以为JScript就是JavaScript的缩写,这一点是需要澄清的,让笔者先讲一段故事。 在Web Scripting language世界中第一个诞生的是,由网景公司(NetScape)所催生的JavaScript。到_javascript的小写缩写是?

iOS开发-设置启动图片LaunchImage_ios创建 launchimage-程序员宅基地

文章浏览阅读1.3k次。通常app在开启的时候都会有自己的启动图片,下面就开始设置app的启动图片。第一步:在图片资源包里创建LaunchImage。然后就创建好了LaunchImage,只不过一开始是空的,而这里我已经添加好了图片。注意:一定要按照尺寸添加全部图片,不然会报错。附上:iOS-AppIcon和LaunchImage尺寸附上仅供学习使用:配置好一部分的LaunchImage下载..._ios创建 launchimage

Mock进行单元测试_单体测试用mock吗-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏17次。中文文档参考地址,点击这里汪文君Mockito实战视频汪文君Mockito源码,点击这里@InjectMocks用来修饰被测试的类:就是对哪个类中的方法进行单元测试的时候,就用该注解修饰这个类。InjectMocks创建这个类的对象并自动标记@Mock,@Spy等注解的属性注入到这个中。要求必须是类不能是接口。使用1.Maven<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all --> &l_单体测试用mock吗

.tar.gz 跟.tgz_tgz和tar.gz-程序员宅基地

文章浏览阅读2.6k次。.tar.gz 跟.tgz 是一种格式吗?tar.gz_百度百科以.tar.gz为后缀的文件是一种压缩文件,在Linux和macOS下常见,Linux和macOS都可以直接解压使用这种压缩文件。_tgz和tar.gz

yolov3代码详细解读_yolov3代码详解-程序员宅基地

文章浏览阅读3.4k次,点赞15次,收藏73次。下文所有代码:https://pan.baidu.com/s/1p-Q-edFXXcvzxlZNd9saOw 提取码:x72s原理可以参考:yolov1-v5学习笔记及源码解读目录1 目录结构2 train.py2.1 数据读取 dataset.py2.2 网络搭建 models.py2.2.1 搭建模型2.2.2 yolo层的实现2.2.3 darknet进行模型前向传播3 test.py4 detect.py5 功能脚本5.1 utils.py:5.2 logger.py5.3 augment._yolov3代码详解

一步步制作Arduino智能小车_arduino小车-程序员宅基地

文章浏览阅读1.4w次,点赞21次,收藏285次。小白第一次实战_arduino小车

随便推点

Java购物小系统(使用最基础的语法实现的控制台购物系统)_java控制台采购系统-程序员宅基地

文章浏览阅读2.6k次。自述:本人是一名卑微专科大一软件技术学生,目前学习Java已经快三个月了吧,在这里给大家分享一下我的学习成果,希望看到的大佬可以给我一些建议,也希望这篇文章能给正在学习Java的小伙伴一些练习的途径:程序执行的入口是(InSystem.java)文件总共分为十一个Java文件 客户信息管理 添加客户信息 创建一个客户类,里面声明客户应具备的客户信息,如:客户编号、客户姓名、客户电话、客户积分等,声明该类的对象数组,利用对象数组存储客户的信息,_java控制台采购系统

Android开发 轻量缓存框架--ASimpleCache_android 轻量缓存文件-程序员宅基地

文章浏览阅读339次。做Android应用开发的同学们相信对“缓存”这个词不陌生,缓存可能有多方面的概念,这里大概列举下程序开发的缓存大概有哪些:1.服务端控制缓存如volley请求库,便是通过服务端的“Cache-Control”和“max-age”来告诉客户端有没有缓存以及缓存的时间,也是推荐的使用方式,但是需要服务端配合,比较灵活。2.客户端直接控制缓存有些时候不需要服务端来支持的_android 轻量缓存文件

《机器人动力学与控制》第七章—路径规划与避障 7.3 工作空间下使用人工势场法进行路径规划_排斥势场-程序员宅基地

文章浏览阅读1.8k次。上一节我们发现,在关节空间下,很难获得一个直白的障碍物空间QO的表达,也很难在关节空间下评估人工势场的梯度。事实上,对于一个曲面,一般来说并不存在一个描述点到曲面的闭合表达式。即便我们能够表达清楚QO,仍然很难获得关节空间下的梯度ρ。为了解决这些问题,我们将对上一节说到的人工势场法做出一点改进,使势场方程定义在工作空间 W 而不是关节空间 Q。本节我们会先讲解如何一个在工作空间里正确地描述势场,..._排斥势场

CSS学习笔记-程序员宅基地

文章浏览阅读166次,点赞2次,收藏6次。CSS学习笔记本文章是基于B站pink老师的视频和PPT,结合个人认为重点的部分以及自身模糊的知识点进行归纳。一、CSS(1)1. CSS简介CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。有时我们也会称之为 CSS 样式表或级联样式表。CSS 是也是一种标记语言 。2. CSS基础选择器2.1 选择器分类选择器分为基础选择器和复合选择器两个大类,我们这里先讲解一下基础选择器。基础选择器是由单个选择器组成的基础选择器又包括:标签选择器、 类选

北斗卫星与GPS介绍_北斗系统能获取z轴数据了吗-程序员宅基地

文章浏览阅读3.3k次。学习过空间解析几何的同学都知道,在一个立体直角坐标系中,任何一个点的位置都可以通过三个坐标数据X、Y、Z来得到确定。也就是说,只要能得到X、Y、Z三个坐标数据,就可以确知任何一点在空间中的位置。如果能测得某一点与其它三点A、B、C的距离,并确知A、B、C三点的坐标,就可以建立起一个三元方程组,解出该未知点的坐标数据,从而得到该点的确切位置。  GPS就是根据这一原理,在太空中建立了一个由24颗_北斗系统能获取z轴数据了吗

Java word导出,可导出一份word或多页word内容_有模板的word导出 需要导出多份 一个文件 java-程序员宅基地

文章浏览阅读6.4k次。一步步按着写,图片看不清的,右键打开新标签页查看图片,谢谢htmla href="javascript:void(0)" class="easyui-linkbutton" plain="true" id="btn_customOpen">导出worda>前端js(ids为传递参数)$.messager.confirm('温馨提示','确认打印选中用户信息!',functio_有模板的word导出 需要导出多份 一个文件 java

推荐文章

热门文章

相关标签