`
tansitongba
  • 浏览: 514216 次
文章分类
社区版块
存档分类
最新评论

内功修炼之操作系统学习(三:同步、通信及死锁)

 
阅读更多

内功修炼之操作系统学习三:同步、通信及死锁

进程并发性是指一组进程的执行在时间上是重叠的。所谓时间重叠是指一个进程执行第一条指令是在另一个进程执行完最后一条指令之前开始的。从宏观上来看,并发性反映一个时间段内有几个进程都处于运行态但尚未结束的状态。从微观上来看,任一时刻仅有一个进程的一个操作在处理器上执行。

现代计算机硬部件能同时进行工作,程序的编制决定不同硬部件并行工作的能力。好的程序能够充分发挥设备的并行工作能力,从而提高计算机系统的效率。

一个程序被分成若干可同时执行的小程序的程序设计方法称为并发程序设计。多个进程相互协作、相互制约。

并发进程可能是无关的,也可能是交互的,无关的并发进程是指它们分别在不同的变量集上操作,一个进程的执行与其他并发进程的进展无关。交互的进程共享某些变量,一个进程的执行可能会影响其他进程的执行结果,因此交互的并发进程之间具有制约关系,它们之间的执行必须有所控制,否则将会出现不正确的结果。

时间无关:多个进程执行的相对次序不影响最终结果。

并发进程的无关性是进程的执行与时间无关的一个充分条件,这由Bernstein提出,假设:

R(p1);程序p1执行期间所引用的变量集。

W(P1);程序p1执行期间所改变的变量集。

若两个进程能满足Bernstein条件,

R(p1)W(p2)R(p2)W(p1)W(p1)W(p2)=φ,则称并发进程的执行与时间无关。

并发程序设计实在多道程序设计的基础上发展起来的,它可以充分发挥硬件的并行性,消除处理器和设备的互等现象,提高系统效率。计算机硬部件能并发工作仅具备提高效率的可能性,并行工作的实现还需要软件技术来发挥,这种技术就是并发程序设计

两个交互的并发进程,一个进程对另一个进程的影响往往是不可预期的,甚至是无法再现,因为它们执行的相对速度不可预测,可以出现与时间有关的各种错误。有两种形式:一结果不唯一。二永远等待。

多道程序设计中的额进程存在两种基本的关系:竞争和协作。线程的关系也类似。

竞争又称互斥,是指若干进程因相互争夺独占资源而产生的竞争制约关系。由于竞争资源的独立进程不交换信息,一个进程的执行可能影响到竞争资源的其他进程。如果有一个正在访问独占资源,另一个进程不得不等待,极端的情况下,被阻塞的进程永远得不到访问权。资源竞争会引发两个问题:一是死锁:每个进程都获得部分资源而不释放,同时还需要其他进程所占有的资源,导致相互等待的现象。二是饥饿,一个进程由于其他进程总是优先于它,而被无限期拖延,不能执行。

协作又称同步,是指为完成共同任务的并发进程,基于某个条件来协调其活动,因为需要在某些位置上排定执行的而等待、传递信号或消息所产生的协作制约关系。当一个进程到达关键点后,在尚未得到伙伴进程发来的消息或信号之前阻塞自己,当协作者发来信息号或消息后方被唤醒并继续执行。

进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,也是对进程使用资源的次序的一种协调。信号量、锁、管程、消息及其他软硬件机制都可被用作进程和线程请求和释放的资源。多数同步机制主要用于内核层。

能解决进程同步问题的技术一定可以解决进程互斥。

并发进程中与共享变量有关的程序段称为临界区(Criticalsection)。共享变量所代表的资源成为临界资源。与共享变量有关的临界区分散在各个并发进程的程序段中,当一个进程在临界区执行时,就会阻止另一个进程进入相同的临界区。各进程对共享变量的访问是互斥的。

临界区是一段程序,针对每个进程而言,每个进程都有自己的临界区,互不相关。

临界区调度的原则:互斥使用,有空让进,忙则等待,优先等待,择一而入,算法可行。

著名的生产者消费者问题是计算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。

n个生产者和m个消费者,在具有k个单位缓冲区内操作。Pi,ci都是并发进程,只要缓冲区未满,生产者进程pi就会不断生产产品到缓冲区。只要缓冲区非空,消费者进程就不断从缓冲区取产品。生产者和消费者共享缓冲区,但是出现错误的结果并不是因为此,而是它们访问缓冲区的速度不匹配。我们需要调整并发进程的推进速度,并发进程进程的这种制约关系称为进程同步。

当消费者发现缓冲区空时,即count==0后被调度程序暂停执行。生产者进程被调度往缓冲区内添加产品,当它发现此时counter==1,想当然的认为消费者进程是因为没有产品可取已经被挂起。于是唤醒消费者,由于消费者进程并未睡眠,唤醒信号丢失。当调度程序调度消费者进程执行时,由于已经判断过缓冲区为空,消费者进程睡眠。此后生产者不断往缓冲区添加产品,直到添加满后睡眠。两进程都在睡眠,造成所有进程永远处于睡眠状态。

最常用的同步机制是信号量、pv操作、管程和消息传递。

两个或更多进程通过信号量展开交互。一个进程在某一点上被迫停止执行直至接收到某一信号。pv操作用来发送和接收信号量。

信号量在操作系统中主要用于封锁临界区,进程同步及维护资源计数。

信号量semaphore是一个结构体,

typedefstructsemaphore

{

intvalue;//信号量值。

structpcb*list;//信号量队列指针。存储pcb

};

value为整型变量,初始化时赋值,list是等待使用此信号量的进程队列的头指针,初始状态为空队列。

P(s):将信号量value值减一。若结果小于0,则执行此操作的进程被挂起,排入与此信号量有关的list所指的队列中。若结果仍大于0,则该进程继续执行。

V(s):将信号量的值加一。若结果不大于0(说明有进程在等待),则执行此操作的进程从信号量s有关的队列中释放一个进程,使其转为就绪态。

除了初始赋值之外,信号量仅能由同步原语pv进行操作。

1:信号量在初始时刻的初始值表示在挂起进程前,对信号量可施行的p操作数,也即信号量的值代表可用的资源数。

2:若信号量为负值,其绝对值表示此时在此信号量队列之中等待的进程个数。

3P操作意味着请求一个资源,V操作意味着释放一个资源。在一定条件下,P操作代表挂起进程操作,而V操作代表唤醒被挂起进程的操作。

信号量和pv操作可用来解决进程互斥问题。因为互斥的进程同步的一种,凡是能解决进程同步的策略都可以用来解决进程互斥。同步信号量决定能否工作,互斥信号量决定是否有人在工作。先进程并发编程时要先检测同步信号,再检测互斥信号量,且次序不能不能改变。

用信号量和pv操作管理并发进程互斥进入临界区的一般形式为:

Semaphoremutex=1;

ProcessPI()

{

P(mutex)

{

//临界区

}

V(mutex);

}

当有进程在临界区时,mutex0或负值,否则mutex值为1,因为只有一个进程可用P操作把mutex减至0,故可保证互斥操作。其他试图进入临界区的进程会因为执行P(mutex)而阻塞。

信号量解决生产者消费者问题(单缓冲区)

IntB;//缓冲区。

Semaphoreempty=1;//可用缓冲区数。标示缓冲区是否为空。

Semaphorefull=0;//缓冲区可用的产品数。标示缓冲区是否满。

Voidproducer()

{

While(1)

{

Produce();

P(empty);

Append()toB;

V(full);

}

}

Voidconsumer()

{

While(1)

{

P(full);

Take()fromB;

V(empty);

Consume();

}

}

消费者和生产者问题,使用了两个信号量,empty用来表示当前空的缓冲区个数,full用来表示可以取产品的缓冲区个数。初始时empty等于缓冲区的个数。full当然就是0。一定要注意生产者消费者可能都有多个线程,使用一个信号量是不能完成生产者消费者同步工作的。

对于单缓冲区,不存在生产者和消费者同时访问缓冲区的情况。而对于多个缓冲区情况会稍微复杂些,有可能存在同时访问缓冲区的情况,这是不被允许的。需要采取措施防止此种操作。可以采用信号量也可以使用互斥量。

ItemB[k];

Semaphoreempty=k;

Semaphorefull=0;

Semaphoremutex=1;

Inti=0;

Intout=0;

Voidproducer()

{

Produce();

P(mutex);

P(empty);

AppendtoItem[in];

In++=%k;

V(full);

V(mutex);

}

Voidconsumer()

{

P(mutex);

P(full);

TakefromItem[out];

Out++=%k;

V(empty);

V(mutex);

}

上述是针对多缓冲区的操作,P(muex)V(mutex)必须成对出现,它们之间的就是进程临界区。上述代码存在问题:当缓冲区存满k件产品时,此时empty=0mutex=1,full=k;此后生产者又生产了一件产品,当它向缓冲区存放产品时将在P(empty)上等待,此时empty=-1,由于此时mutex=0,已经占有了缓冲区,消费者会在p(full)上等待。这就导致了互相等待的情况。所有在使用信号量和PV操作实现进程同步时,特别要当心P操作的顺序,而V操作的顺序无关紧要。无论何时应先判断同步信号,再判断互斥信号。下面是改正后的代码。

Voidproducer()

{

Produce();

P(empty);

P(mutex);

AppendtoItem[in];

In++=%k;

V(mutex);

V(full);

}

Voidconsumer()

{

P(full);

P(mutex);

TakefromItem[out];

Out++=%k;

V(mutex);

V(empty);

}

读者和写者也是一个经典的并发程序设计问题。有两组并发线程:读者和写者,它们共享文件F。要求:

1:允许多个读者读取文件。

2:只允许一个写者执行写操作。

3:任何写者工作前,必须等待所有读者释放对文件的战友。

4:写者工作时不允许其他读者或写者工作。

仅仅使用信号量并不能解决此问题。必须引入计数器对读者进行计数,专门定义一个互斥信号量用于对计数器的互斥访问。另一个信号量表示是否允许写的信号量。

Intcount=0;

Semaphorewrite=1,mutex=1;

Voidreader()

{

P(mutex);

Count++;

If(count==1)

P(write);//判断是否有写者在对文件进行写操作,有的话读者阻塞。只有第一个读者才进行此判断。

V(mutex);

{

//读文件。

}

P(mutex);

Count--;

If(count==0)

V(write);//当所有读者都退出时释放对文件的占用。只要有读者在占用文件,就不释放对文件的占用。

V(mutex);

}

VoidWriter()

{

P(write);

{

//写文件。

}

V(write);

}

当存在读者时,写者将会被阻塞。且只要有一个读者在读文件时,随后而来的其他读者都允许访问文件,从而导致写者长时间等待,这可能出现饥饿现象。

windowsP操作和V操作分别对应WaitForSingleObjectReleaseSemaphore

为获得被保护资源的访问权,进程或线程要调用一个等待函数并传入信号量的句柄,在内部等待函数会检查信号量的当前资源计数。如果它大于0,那么该函数会把资源计数器减1,调用线程继续执行。如为0,系统会让调用线程进入等待状态。所有这些操作都是原子的。

ReleaseSemaphore递增信号量的资源计数,此时会从信号量等待队列中释放一个线程,将其加入就绪队列使其变为可调度状态。。

进程使用独占型资源必须按照:申请资源、使用资源、归还资源的次序。若资源不可用则申请进程进入等待态。许多情况下进程需要独占方式访问多个资源,当操作系统允许多个进程并发时,可能出现进程永远被阻塞的现象。此现象被称为死锁。产生死锁的因素不仅与系统拥有的资源数量有关,而且与资源分配策略、进程对资源的使用要求以及并发进程的推进顺序有关。

如果一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的时间,而无限期陷入僵持的局面称为死锁

死锁的解决方法主要有:死锁防止、死锁避免、死锁检测和恢复。这些方法也适用于线程。

产生死锁的条件:

1:互斥条件:存在临界资源,互斥的使用之。

2:占有和等待条件:进程在请求资源得不到满足时,不释放已占有资源。

3:不剥夺条件,已占用的资源只能由拥有它的进程释放,不允许其他进程剥夺。

4:循环等待条件:存在循环等待链。每个进程都在链中等待下一个进程所持有的资源,造成永远等待。

前三个条件是死锁存在的必要条件,不是充分条件。第四个条件是前三个的结果。只要破坏四个条件中的一个,就可以防止死锁。

死锁防止策略:

1:破坏互斥条件。

使资源可同时访问而非互斥使用,也就没有进程会阻塞在资源上,而不会发生死锁。

2:破坏占有和等待条件

静态分配可以解决占有和等待条件。静态分配是指进程必须在执行之前就申请所需要的全部资源,直至所有的资源都得到后才开始执行。但这种策略会严重降低资源利用率。

3:破坏不剥夺条件

剥夺调度能够防止死锁,但只是用于主存和处理器资源。方法是占有资源的进程若要申请新的资源,必须主动释放已占用资源。

4:破坏循环等待条件。

采用层次分配策略,将系统中所有资源排列到不同的层次中,一个进程得到某层的一个资源后,只能再申请较高一层的资源。当进程释放某一层的资源时必须先释放所占用的较高层资源。

各种死锁防止算法能够防止发生死锁,但会降低系统的并发性并导致低效的资源利用率。死锁避免却与此相反:如果一个进程当前请求的资源会导致死锁,系统将拒绝启动此进程。如果一个资源分配会导致下一步死锁,系统便拒绝本次分配。

银行家算法是能够避免死锁调度的一种算法。但是它需要在运行前知道所需的资源的最大量,因而缺乏实用价值。

分享到:
评论

相关推荐

    程序员内功修炼-V1.0.pdf

    了解进程的创建、同步、通信以及死锁的概念,掌握虚拟内存、页表、段表等内存管理技术,熟悉文件系统的层次结构和访问方式,以及理解I/O设备的工作原理和缓冲技术,都是操作系统课程中的关键内容。 计算机网络部分...

    【python内功修炼006】:基于threading模块的多线程操作(详解)

    【Python内功修炼006】:基于threading模块的多线程操作 在Python编程中,多线程是并发处理任务的一种方式,能够有效利用系统资源,提高程序的执行效率。threading模块是Python标准库提供的用于创建和管理线程的...

    spring-ai-oracle-store-1.0.0-M7.jar中文文档.zip

    # 【spring-ai-oracle-store-1.0.0-M7.jar中文文档.zip】 中包含: 中文文档:【spring-ai-oracle-store-1.0.0-M7-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-oracle-store-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-oracle-store-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-oracle-store-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-oracle-store-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-oracle-store-1.0.0-M7.jar中文文档.zip,java,spring-ai-oracle-store-1.0.0-M7.jar,org.springframework.ai,spring-ai-oracle-store,1.0.0-M7,org.springframework.ai.vectorstore.oracle,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,oracle,store,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spring-ai-oracle-store-1.0.0-M7.jar中文文档.zip】,再解压其中的 【spring-ai-ora

    3dmax插件丢失贴图.ms

    3dmax插件

    azure-ai-openai-1.0.0-beta.3.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    (专升本)C语言历年考试题及答案2.doc

    (专升本)C语言历年考试题及答案2.doc

    spring-ai-mongodb-atlas-store-1.0.0-M5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    基于Matlab/Simulink的DSTATCOM无功补偿风电并网模型仿真与优化

    内容概要:本文介绍了利用Matlab/Simulink搭建的带有DSTATCOM无功补偿的风电并网模型及其仿真结果。模型中包含了双馈风机(DFIG)和鼠笼感应风机(SCIG),并通过DSTATCOM实现了对电压波动的有效抑制。文中详细描述了DSTATCOM的控制策略,包括电压-无功闭环控制、PI控制器的设计以及低电压穿越功能的实现。此外,还讨论了仿真过程中遇到的一些常见问题及解决方案,如参数选择不当引起的过冲现象、仿真加速技巧等。 适合人群:从事电力系统、风电并网研究的技术人员和研究人员。 使用场景及目标:适用于希望深入了解风电并网系统中无功补偿机制的研究人员和技术人员,旨在提高对DSTATCOM控制策略的理解,掌握解决电压不稳定问题的方法。 其他说明:文中提供了详细的控制算法代码片段,有助于读者更好地理解和复现实验结果。同时,作者分享了一些实用的经验和技巧,如参数调整、仿真加速方法等,对于实际应用具有重要参考价值。

    【基于矢量射线的衍射积分 (VRBDI)】基于矢量射线的衍射积分 (VRBDI) 和仿真工具附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    langchain4j-ollama-0.26.1.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    ### 中国智能制造产业发展报告(2023-2024年)总结、智能制造概述

    内容概要:本文详细介绍了2023-2024年度中国智能制造产业发展情况。报告由多个部门和机构联合编写,涵盖智能制造总述、AI赋能制造业转型升级、全球智能制造发展形势、中国智能制造概况、产业分析、发展规划及优秀案例。报告指出,智能制造已成为提升制造业竞争力的国家战略,强调了新一代信息技术与制造业深度融合的重要性。文中分析了中国智能制造的优势、面临的挑战及未来的发展目标,强调了政策引领、试点先行和跨域协同的重要性。同时,报告探讨了AI在智能制造中的应用,特别是大模型对制造业的推动作用,并列举了多个行业和地区的智能制造政策和具体案例,展示了智能制造在中国的广泛应用和未来发展潜力。 适用人群:政府相关部门、智能制造领域的研究人员、企业高管和技术人员、高等院校相关专业的师生等。 使用场景及目标:①帮助政府和企业了解智能制造的最新发展动态和政策导向;②为制造业企业提供智能化转型的参考案例和技术解决方案;③为高校和研究机构提供智能制造领域的研究素材和方向;④促进智能制造技术的普及和应用,推动制造业高质量发展。 阅读建议:此报告内容详尽,涵盖了智能制造的多个方面,读者应重点关注中国智能制造的优势、面临的挑战、发展目标及相关政策。同时,结合实际工作或研究需求,深入研读具体章节和案例,以获得更有针对性的知识和启示。

    自动驾驶车辆运动控制中PID参数优化的强化学习探索:基于DDPG算法的解决方案

    内容概要:本文探讨了在自动驾驶车辆运动控制中,传统PID控制算法由于参数固定的局限性,难以适应复杂的路况和车速变化的问题。为了克服这一挑战,文章介绍了如何利用基于Actor-Critic框架的DDPG(深度确定性策略梯度)算法来动态调整PID控制参数。具体来说,Actor网络负责输出优化后的PID参数,而Critic网络则评估这些参数的效果。通过不断的学习和调整,使车辆能够在各种情况下表现出更好的控制性能。此外,文中还详细描述了奖励函数的设计,确保控制不仅精确而且平稳。 适合人群:从事自动驾驶研究的技术人员、对强化学习应用于实际控制系统感兴趣的学者及工程师。 使用场景及目标:适用于希望提升自动驾驶车辆在复杂道路条件下的稳定性和灵活性的研究项目。目标是在不同路况和车速条件下,通过动态调整PID参数,提高车辆的控制精度和平顺性。 其他说明:文章提供了具体的代码示例,帮助读者理解和实现相关算法。同时也指出了在实际应用中可能遇到的问题及其解决办法,如参数调整的边界约束、状态输入的数据平滑处理等。

    spring-ai-opensearch-store-1.0.0-M5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar中文-英文对照文档.zip

    # 【spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-model-chat-memory-jdbc-1.0.0-M7-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-model-chat-memory-jdbc-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar中文-英文对照文档.zip,java,spring-ai-model-chat-memory-jdbc-1.0.0-M7.jar,org.springframework.ai,spring-ai-model-chat-memory-jdbc,1.0.0-M7,org.springframework.ai.chat.memory.jdbc,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,model,chat

    tokenizers-0.25.0.jar中文文档.zip

    # 【tokenizers-***.jar***文档.zip】 中包含: ***文档:【tokenizers-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【tokenizers-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【tokenizers-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【tokenizers-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【tokenizers-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: tokenizers-***.jar***文档.zip,java,tokenizers-***.jar,ai.djl.huggingface,tokenizers,***,ai.djl.engine.rust,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,djl,huggingface,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【tokenizers-***.jar***文档.zip】,再解压其中的 【tokenizers-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>ai.djl.huggingface</groupId> <artifactId>tokenizers</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'ai.djl.huggingface', name: 'tokenizers', version: '***' Gradle (Short): implementation 'ai.djl.huggingface:tokenizers:***' Gradle (Kotlin): implementation("ai.djl.huggingface:tokenizers:***") ``` # 含有的 Java package(包): ``` ai.djl.engine.rust ai.djl.engine.rust.zoo ai.djl.huggingface.tokenizers ai.djl.huggingface.tokenizers.jni ai.djl.huggingface.translator ai.djl.huggingface.zoo ``` # 含有的 Java class(类): ``` ai.djl.engine.rust.RsEngine ai.djl.engine.rust.RsEngineProvider ai.djl.engine.rust.RsModel ai.djl.engine.rust.RsNDArray ai.djl.engine.rust.RsNDArrayEx ai.djl.engine.rust.RsNDArrayIndexer ai.djl.engine.rust.RsNDManager ai.djl.engine.rust.RsSymbolBlock ai.djl.engine.rust.RustLibrary ai.djl.engine.rust.zoo.RsModelZoo ai.djl.engine.rust.zoo.RsZooProvider ai.djl.huggingface.tokenizers.Encoding ai.djl.huggingface.tokenizers.HuggingFaceTokenizer ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.Builder ai.djl.hu

    【企业智能化转型】腾讯云DeepSeek大模型知识引擎:提升企业人效与业务增长的智能解决方案

    内容概要:本文介绍了腾讯云DeepSeek大模型知识引擎在企业服务中的应用,旨在提升企业人效和业务增长。大模型具备理解、学习、生成和推理能力,已在智能客服、智能办公等领域落地。文章详细介绍了三种主要应用模式——标准模式、工作流模式和Agent模式,分别适用于不同需求场景。此外,还展示了知识引擎在企业行政问答、专业知识查询、质检、保险建议书生成等具体业务中的成功案例。针对大模型应用中的难点,如企业知识更新快、知识格式多样等问题,腾讯云提供了全链路解决方案,涵盖知识获取、处理、检索、理解和生成。最后,文章强调了大模型知识引擎的安全防护措施,确保数据资产的安全。 适合人群:企业管理人员、信息技术部门负责人、数据科学家、AI开发者等关注企业智能化转型的专业人士。 使用场景及目标:①通过智能客服、智能办公等场景提高员工工作效率;②利用标准模式、工作流模式和Agent模式满足不同业务需求;③解决企业知识更新快、知识格式多样等实际难题,提升业务处理的准确性和效率;④保障企业数据安全,防止敏感信息泄露。 其他说明:本文还探讨了大模型在金融舆情摘要、投顾服务、投研服务、车险评残业务等领域的潜在应用场景,展示了大模型知识引擎的广泛适用性和强大功能。

    电源.SCHLIB

    电源.SCHLIB

    基于小脑模型神经网络的轨迹跟踪研究附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    西门子PLC1500与Fanuc机器人在汽车焊装产线的应用及优化

    内容概要:本文详细介绍了西门子PLC1500与Fanuc机器人在汽车焊装生产线中的应用及其优化措施。首先,文章描述了PLC1500的核心架构,包括9个ET200SP远程站、16个Festo气动模块以及Profinet拓扑结构。接着,探讨了机器人通讯方式,如使用TSEND_C/TRCV_C指令进行数据交换,并展示了具体的焊接参数下发实例。此外,还讨论了SCL算法在电流平衡逻辑中的应用,以及GRAPH顺控程序在车门焊接流程中的高效实现方法。文中还提到了安全模块配置、诊断功能堆栈设计、MES系统交互等方面的技术细节。最后,强调了混合编程的优势,特别是在处理复杂数据交互时的表现。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉PLC编程和机器人控制的专业人士。 使用场景及目标:适用于需要深入了解PLC1500与Fanuc机器人协同工作的技术人员,帮助他们掌握先进的编程技巧和优化方法,提高生产效率和安全性。 其他说明:本文不仅提供了详细的代码示例,还分享了许多实际项目中的经验和教训,有助于读者更好地理解和应用相关技术。

    MATLAB实现虚拟电厂中电转气协同与碳捕集优化调度的研究

    内容概要:本文详细介绍了如何使用MATLAB实现虚拟电厂中电转气(P2G)协同与碳捕集的优化调度。虚拟电厂将垃圾焚烧发电、碳捕集装置和电转气设备整合在一起,通过构建包含28个决策变量的优化模型,最小化总运行成本。模型的目标函数涵盖了燃料成本、碳交易成本、P2G运行成本等多个方面。文中展示了具体的MATLAB代码实现,包括目标函数、约束条件、求解器配置等方面的内容。此外,还讨论了电转气设备的建模、需求响应模块的设计以及碳捕集装置的能耗管理等问题。实验结果显示,引入P2G后总成本降低了12.7%,碳排放强度下降了21.3%。 适合人群:从事能源系统优化、虚拟电厂调度、碳捕集技术和电转气技术研究的专业人士和技术爱好者。 使用场景及目标:适用于希望深入了解虚拟电厂中多能耦合调度策略及其MATLAB实现的研究人员和工程师。主要目标是掌握如何通过优化模型降低运行成本和碳排放强度。 其他说明:文章强调了在实际应用中需要注意的一些细节,如CPLEX求解器的内存瓶颈、碳捕集装置的能耗管理、电转气设备的启停成本等。

Global site tag (gtag.js) - Google Analytics