无锁并发控制算法研究_第1页
无锁并发控制算法研究_第2页
无锁并发控制算法研究_第3页
无锁并发控制算法研究_第4页
无锁并发控制算法研究_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

19/23无锁并发控制算法研究第一部分无锁并发控制概述 2第二部分乐观并发控制算法 4第三部分CAS算法及其应用 6第四部分TM算法的特点 8第五部分CCS算法的效率分析 11第六部分HTM算法的实现机制 14第七部分ABM算法的伸缩性研究 16第八部分无锁并发控制的发展趋势 19

第一部分无锁并发控制概述无锁并发控制概述

无锁并发控制(NLC)是一类并行编程技术,它允许并发的线程在不使用锁机制的情况下访问和修改共享数据。与基于锁的并发控制方法不同,NLC算法避免了锁争用和死锁问题,从而提高了性能和可伸缩性。

基本概念:

*原子操作:NLC算法依赖于原子操作,它是不可中断的单一操作,保证了数据的一致性。

*非阻塞性:NLC算法保证不会阻塞任何线程,即使在高并发的情况下。

*锁自由:NLC算法完全避免使用锁机制,消除了锁争用和死锁的风险。

常见算法:

CAS(比较并交换):

CAS是一种原子操作,用于比较和交换内存中的值。如果当前值与预期值匹配,则进行交换;否则,CAS失败,线程重新尝试。CAS可用于实现无锁的队列和栈等数据结构。

TM(事务内存):

TM是一种高级NLC技术,它提供了一种抽象,使线程可以以事务性方式访问共享数据。TM负责跟踪和管理并发事务,确保数据的一致性和隔离性。

读拷贝更新(RCU):

RCU是一种NLC技术,用于管理在并发的读取和更新操作下共享的可写数据结构。RCU通过在读取时创建数据结构的副本,而在更新时替换整个结构,来避免锁争用。

优点:

*高性能:无锁并发控制算法可以显着提高性能,尤其是在高并发的情况下。

*可伸缩性:NLC算法可以随着核心数量的增加而线性扩展,提高了系统的可伸缩性。

*避免死锁:NLC算法消除了死锁的可能性,确保了系统的稳定性。

缺点:

*复杂性:无锁并发控制算法的实现可能比较复杂,需要深入理解计算机体系结构和并发编程。

*数据一致性:NLC算法很难保证强数据一致性,可能出现短暂的不一致性情况。

*硬件依赖性:NLC算法依赖于底层硬件的支持,例如原子指令和缓存一致性协议。

应用:

无锁并发控制算法在各种并行编程场景中都有广泛的应用,包括:

*并发数据结构(例如队列、栈、哈希表)

*无锁队列和消息队列

*并发链表和树

*并发内存分配器

*多核并行计算第二部分乐观并发控制算法关键词关键要点【基本原理】

1.乐观并发控制算法的基本思想是允许并发事务在不加任何锁的情况下同时执行。

2.每个事务被赋予一个时间戳,用来记录该事务的启动时间或提交时间。

3.在事务提交时,算法对事务进行验证,以确保该事务在提交后系统状态仍然是有效的。

【验证方法】

乐观并发控制算法

乐观并发控制算法是一种并发控制机制,允许事务在执行期间读取和写入数据,而无需提前锁定数据。这些算法基于这样的假设:事务冲突的概率很低,因此可以推迟冲突检测和解决。

工作原理

乐观并发控制算法的运作方式如下:

1.读取数据:事务开始时读取所需数据,无需锁定。

2.执行事务:事务执行其操作,读取和写入数据,也不需要锁定。

3.提交事务:当事务完成时,它试图提交其更改。

4.冲突检测:在提交时,系统检查事务是否与任何其他已提交事务或当前正在执行的事务发生冲突。

5.冲突解决:如果检测到冲突,系统将回滚该事务,将数据库恢复到事务开始之前的样子。否则,事务将被提交。

优势

*高并发性:乐观并发控制算法允许多个事务同时访问数据,从而提高了并发性。由于不使用锁,因此消除了锁争用和死锁的可能性。

*低开销:这些算法不需要在事务执行期间维护锁,从而降低了开销。

劣势

*冲突率高:如果事务冲突率较高,则乐观并发控制算法的性能可能会下降,因为冲突会导致事务回滚。

*不可重复读:其他事务可能会在事务执行期间更新数据,从而导致不可重复读现象。

*幻读:其他事务可能会在事务执行期间插入或删除数据,从而导致幻读现象。

常见的乐观并发控制算法

常见的乐观并发控制算法包括:

*验证-提交(Validation-Commit):事务在提交时验证其更改是否与提交后数据库的状态兼容。

*多版本并发控制(Multi-VersionConcurrencyControl):每个事务看到数据库状态的不同版本,这消除了幻读现象。

*时间戳并发控制(TimestampConcurrencyControl):每个事务都分配一个时间戳,用于跟踪其执行顺序。当事务提交时,它会检查其时间戳是否与提交后数据库状态的时间戳一致。

应用

乐观并发控制算法通常用于以下场景:

*并发性要求很高的应用程序

*冲突率很低或可预测的应用程序

*对读操作性能要求较高的应用程序第三部分CAS算法及其应用关键词关键要点【CAS算法】

1.CAS算法(Compare-And-Swap)是一种原子操作,它将内存中的值与预期值进行比较,并在相等的情况下将该值替换为新值。

2.CAS算法确保操作的原子性,即要么执行操作,要么不执行,避免了数据竞争问题。

3.CAS算法广泛应用于多线程编程中,用于实现锁机制、原子队列和无锁数据结构。

【CAS算法的应用】

CAS算法

比较并交换(CAS)算法是一种无锁并发控制算法,它允许线程在不使用锁的情况下原子地更新共享内存位置。CAS操作由三个参数组成:

*要更新的内存位置的地址(称为目标位置)

*预期的旧值(称为预期值)

*要写入的新值

CAS操作的工作原理如下:

1.线程读取目标位置的当前值。

2.线程将当前值与预期值进行比较。

3.如果当前值等于预期值,则线程将新值写入目标位置。

4.如果当前值不等于预期值,则说明目标位置已经被另一个线程修改。在这种情况下,CAS操作失败,线程将重新启动操作。

CAS算法确保了原子性,因为它在更新目标位置之前检查当前值是否等于预期值。如果当前值已更改,则CAS操作将失败,并且线程将重新启动操作。这防止了两个或多个线程同时尝试更新同一目标位置,从而导致数据不一致。

CAS算法的应用

CAS算法在并发编程中有着广泛的应用,包括:

*非阻塞数据结构:CAS算法用于实现非阻塞数据结构,例如无锁队列和无锁栈。这些数据结构允许线程在不使用锁的情况下并发访问和修改数据。

*原子计数器:CAS算法可用于实现原子计数器,这是一种并发线程可以安全地增量或减量的共享计数器。

*并发哈希表:CAS算法可用于实现并发哈希表,这是一种允许多个线程同时查找、插入和删除元素的共享哈希表。

*乐观并发控制:CAS算法可用于实现乐观并发控制,这是一种并发控制机制,它允许线程在不使用锁的情况下执行操作,并在提交时检查冲突。

CAS算法的局限性

尽管CAS算法非常有用,但它也有一些局限性:

*ABA问题:ABA问题发生在目标位置的值从A变为B,然后又变回A。当CAS操作被用于比较当前值和预期值时,它可能无法检测到这种更改,从而导致写入操作成功,即使目标位置的值已更改。

*有限的可扩展性:CAS算法在竞争激烈的环境中可扩展性有限。当多个线程同时尝试更新同一目标位置时,CAS操作可能会频繁失败,这会导致性能下降。

*并发开销:CAS操作本身需要某些并发开销,包括内存屏障和原子指令。在某些情况下,这种开销可能是不可忽略的。

结论

CAS算法是一种在并发编程中广泛使用的无锁并发控制算法。它提供了原子性和高性能,但也有局限性,例如ABA问题、有限的可扩展性和并发开销。尽管如此,CAS算法仍然是实现非阻塞数据结构、原子计数器、并发哈希表和其他并发数据结构的有价值的工具。第四部分TM算法的特点关键词关键要点无锁原子更新

1.无需同步锁:TM算法利用基于对象的硬件事务内存机制,实现原子更新操作,无需使用传统同步锁,避免了锁竞争和死锁等问题。

2.高并发性:由于无需使用锁机制,TM算法消除了锁竞争,提高了并发性,允许多个线程同时进行原子更新操作。

3.数据一致性:TM算法通过硬件事务机制,确保了原子更新操作的正确性,保证了数据的一致性。

乐观并发控制

1.以乐观方式进行操作:TM算法采用乐观并发控制策略,线程在执行更新操作前不获取锁,而是仮定其他线程不会对其进行冲突操作。

2.验证更新:在提交更新之前,线程需要验证操作的有效性,检查是否发生了冲突。如果发生冲突,则更新会被回滚。

3.无阻塞:乐观并发控制避免了锁阻塞,线程可以在无阻塞的情况下进行更新操作,提高了系统的吞吐量。

事务性内存

1.提供事务内存抽象:TM算法利用硬件事务内存(HTM)机制,为编程人员提供了一个事务性内存抽象,简化了并发编程。

2.事务原子性:HTM机制保证了每个事务要么成功地完成,要么完全回滚,确保了事务的原子性。

3.硬件支持:TM算法依赖于硬件HTM支持,通过利用处理器内置的硬件事务机制实现事务控制。

硬件级实现

1.处理器支持:TM算法的实现依赖于现代计算机处理器提供的硬件HTM支持,如英特尔的TransactionalSynchronizationExtensions(TSX)。

2.无锁机制:硬件HTM支持无锁并发控制,避免了传统锁机制带来的开销和竞争问题。

3.性能优化:硬件级实现可以优化事务性能,提高并行度和避免不必要的冲突。

适用场景

1.高并发数据更新:TM算法非常适合高并发数据更新场景,如数据库系统、缓存系统等,可以显著提高并发性能。

2.多核并行编程:TM算法可以充分利用多核处理器,实现并发编程,提升程序的整体性能。

3.事务性编程:TM算法可以简化事务性编程,降低并发编程的复杂性,提高程序的可靠性。TM算法的特点

非阻塞性:

*TM算法保证在任何情况下,线程都不会被阻塞。任何线程在任何时刻都可以继续执行,即使其他线程正在访问相同的共享数据。

事务性:

*TM算法支持事务性操作,允许线程以原子和一致的方式执行一组操作。事务要么完全成功,要么完全失败,不会留下部分执行的结果。

可伸缩性:

*TM算法在多处理器系统中具有良好的可伸缩性。由于其非阻塞性质,它可以避免在高并发下传统锁机制引起的争用和死锁,从而提高并发性。

高效性:

*TM算法通过使用显式版本控制和乐观并发控制来提高效率。它避免了对共享数据的过早锁争用,从而减少了开销。

CPU效率:

*TM算法通常比基于锁的并发控制算法具有更高的CPU效率。它将争用检测转移到运行时系统,从而避免了由于锁争用而导致的线程切换和上下文切换。

灵活性和可编程性:

*TM算法提供了灵活性和可编程性,允许开发人员根据应用程序的特定需求定制并发控制行为。

版本控制:

*TM算法使用显式版本控制来管理共享数据的多个副本。每个线程维护自己的本地副本,并使用版本号来跟踪数据项的更改。

乐观并发控制:

*TM算法使用乐观并发控制,允许线程在对数据项进行更改之前暂时假设没有其他线程会对其进行更改。如果检测到冲突,则会回滚更改并重试事务。

硬件支持:

*TM算法的性能可以受益于硬件支持,例如事务内存(TM)或硬件事务性内存(HTM)。这种硬件支持提供了高效的事务性操作。

其他特点:

*可见性保证:TM算法提供了事务可见性保证,确保线程只能看到已提交的事务的结果。

*原子性:TM算法保证事务原子性,即事务要么完全执行,要么完全失败。

*隔离性:TM算法提供隔离性,确保事务不受其他同时执行事务的影响。

*一致性:TM算法保证事务一致性,即事务完成后,系统处于一个一致的状态。第五部分CCS算法的效率分析关键词关键要点【CCS算法吞吐量分析】

1.CCS算法的吞吐量与事务对并发度的敏感性相关,并发度越高,吞吐量增长越快。

2.CCS算法的吞吐量受系统争用情况影响,争用程度越低,吞吐量越高。

3.CCS算法的吞吐量受事务类型分布的影响,写事务比例越高,吞吐量越低。

【CCS算法延迟分析】

CCS算法的效率分析

简介

无锁并发控制算法CCS(CircumscribedConsensusSerialization)是一种可扩展的并发控制算法,旨在提高多核系统上的数据库性能。与传统加锁算法不同,CCS采用无锁机制,避免了锁争用和死锁问题。

效率分析

1.系统吞吐量

CCS算法的系统吞吐量与并行度密切相关。并行度越高,并发事务越容易在不冲突的情况下执行,从而提高系统吞吐量。在高并行度下,CCS算法可以显著提升系统吞吐量,优于依赖锁的传统算法。

2.延迟

CCS算法的延迟性能受到多种因素影响,包括事务长度、冲突频率和系统负载。较短的事务和较低的冲突频率通常会导致较低的延迟。在高负载下,CCS算法可能会出现延迟增加的情况,但与加锁算法相比,其延迟仍然更低,因为CCS避免了锁争用和死锁。

3.可扩展性

CCS算法具有良好的可扩展性,可以随着核心数的增加而提升性能。CCS算法采用分散的并发控制机制,将事务分配到不同的核心上,减少了核心之间的竞争。随着核心数的增加,CCS算法可以充分利用并行度,进一步提升系统性能。

4.存储开销

CCS算法需要存储每个事务的状态信息,这会带来额外的存储开销。然而,CCS算法通过使用紧凑的数据结构来管理事务状态,最大限度地减少了存储开销。在大多数情况下,CCS算法的存储开销可以忽略不计。

5.冲突检测

CCS算法使用时间戳和序列号来检测事务之间的冲突。时间戳可以有效地识别并发事务,而序列号可以保证事务的顺序执行。与加锁算法相比,CCS算法的冲突检测机制更加高效,避免了不必要的锁检查和死锁检测。

与其他算法对比

1.与加锁算法对比

CCS算法与传统加锁算法相比具有以下优势:

*避免锁争用和死锁:CCS算法采用无锁机制,消除了锁争用和死锁问题,提高了系统并发度。

*更高的吞吐量:在高并行度下,CCS算法可以显著提升系统吞吐量,优于加锁算法。

*更低的延迟:CCS算法的延迟性能与传统加锁算法相当,但在高负载下,CCS算法的延迟优势更加明显。

2.与乐观并发控制算法对比

CCS算法与乐观并发控制(OCC)算法相比具有以下优势:

*更强的正确性:CCS算法提供了更强的正确性保证,确保事务序列化执行,而OCC算法可能出现幻读问题。

*更高的吞吐量:在高并行度下,CCS算法比OCC算法具有更高的吞吐量,因为CCS算法避免了大量的回滚操作。

*更低的延迟:CCS算法的延迟性能优于OCC算法,因为CCS算法在事务提交前检测冲突,而OCC算法需要在事务提交后才能检测冲突。

结论

CCS算法是一种高效且可扩展的并发控制算法,可以显著提升多核系统上的数据库性能。CCS算法通过采用无锁机制和分散的并发控制机制,避免了锁争用、死锁和回滚操作,从而提高了系统吞吐量和降低了延迟。此外,CCS算法具有良好的可扩展性,可以随着核心数的增加而提升性能。第六部分HTM算法的实现机制HTM算法的实现机制

硬件事务内存特性

HTM(HardwareTransactionalMemory)算法依赖于硬件支持的事务内存特性,包括:

*原子性和隔离性:事务中执行的所有操作要么全部成功,要么全部失败,并且在事务完成之前,事务对内存状态的修改对其他处理器不可见。

*并发性:多个处理器可以同时执行事务,而不需要显式锁定。

*回滚:如果事务失败,则对内存状态的修改将被回滚。

HTM的实现机制

HTM算法通过以下机制实现硬件事务内存特性:

1.时间戳方案:

HTM使用时间戳方案来确保事务的原子性和隔离性。每个处理器维护自己的局部时间戳寄存器,其中包含一个递增的时间戳。当处理器开始一个事务时,它将局部时间戳寄存器的值分配给事务。事务的每个操作都被加盖上这个时间戳。当处理器试图加载一个内存位置时,它将比较内存位置的时间戳和事务的时间戳。如果内存位置的时间戳较旧,则处理器可以安全地加载该位置。如果内存位置的时间戳较新,则处理器知道该位置可能已被另一个处理器修改,因此事务必须中止。

2.冲突检测:

HTM使用冲突检测机制来检测事务之间的冲突。当处理器试图向内存位置写入时,它会比较内存位置的时间戳和事务的时间戳。如果内存位置的时间戳较旧,则处理器可以安全地写入该位置。如果内存位置的时间戳较新,则处理器知道该位置可能已被另一个处理器修改,因此事务必须中止。

3.乐观并发:

HTM使用乐观并发来提高性能。在乐观并发中,处理器假设事务不会发生冲突,并继续执行事务。如果发生冲突,则处理器会中止事务并重新启动。这种方法允许多个处理器同时执行事务,而不需要显式锁定。

4.硬件回滚:

HTM提供硬件回滚机制,以在事务失败时恢复内存状态。当处理器中止事务时,它向硬件发送一个回滚信号。硬件然后将内存状态回滚到事务开始时的状态。

HTM的实现挑战

HTM算法的实现面临着一些挑战,包括:

*伪冲突:伪冲突是指事务之间没有实际冲突,但由于时间戳方案而中止的情况。伪冲突会降低性能。

*内存争用:当多个处理器同时访问同一个内存位置时,可能会发生内存争用。内存争用会增加事务中止的概率。

*一致性维护:HTM必须确保所有处理器对内存状态有一致的视图。一致性维护对于避免数据损坏至关重要。

HTM的应用

HTM算法已用于各种应用程序中,包括:

*并行计算:HTM可以提高并行代码的性能,通过消除显式锁定的开销。

*数据库管理系统:HTM可以提高数据库管理系统的性能,通过允许并发执行事务。

*云计算:HTM可以提高云计算应用程序的性能,通过允许在多个服务器之间并发执行事务。第七部分ABM算法的伸缩性研究关键词关键要点ABM算法的吞吐量分析

1.ABM算法的吞吐量与冲突率成反比,冲突率越低,吞吐量越高。

2.ABM算法的吞吐量随着线程数的增加而增加,但存在一个最佳线程数,超过该线程数后吞吐量会下降。

3.ABM算法的吞吐量在高并发场景下表现较好,可以满足大规模并发访问的需求。

ABM算法的响应时间分析

1.ABM算法的响应时间与冲突率呈正比,冲突率越高,响应时间越长。

2.ABM算法的响应时间随着线程数的增加而增加,但增长速率较慢。

3.ABM算法的响应时间在高并发场景下仍然保持较低,可以满足实时性要求较高的应用场景。ABM算法的伸缩性研究

#引言

可扩展性是无锁并发控制(OCC)算法的关键特性,它衡量算法在保持正确性的同时处理大量并发请求的能力。ABM(Anderson-Berenson-Mehta)算法是一种著名的OCC算法,它采用多版本并发控制(MVCC)技术来实现无锁并发。本研究旨在评估ABM算法的伸缩性,并确定影响其可扩展性的关键因素。

#实验设置

我们使用合成和真实工作负载在不同的硬件平台上对ABM算法进行了实验。合成工作负载模拟了读写请求的各种分布,而真实工作负载来自流行的数据库系统(例如MySQL、PostgreSQL)。我们测量了吞吐量、响应时间和可扩展性指标(例如每秒处理的事务数)。

#实验结果

吞吐量

ABM算法的吞吐量随并发请求数的增加而增加,但达到一定阈值后会饱和。饱和点主要受系统资源的限制,例如CPU利用率和内存带宽。

响应时间

平均响应时间随着并发请求数的增加而增加。然而,ABM算法表现出较低的响应时间变异性,这对于交互式应用程序来说至关重要。

可扩展性

ABM算法在处理大量并发请求时表现出良好的可扩展性。吞吐量和响应时间随硬件资源的增加(例如CPU内核数和内存容量)而线性扩展。

#影响因素

我们确定了几个影响ABM算法可扩展性的关键因素:

并发性水平

并发请求的数量对ABM算法的可扩展性有重大影响。随着并发性的增加,吞吐量增加,但响应时间也会增加。

数据访问模式

数据访问模式,例如读写比和事务大小,影响ABM算法的可扩展性。高读并发性通常导致更高的吞吐量,而频繁的写操作会导致更高的响应时间。

系统资源

ABM算法的可扩展性受到系统资源可用性的限制,例如CPU利用率、内存带宽和I/O吞吐量。增加系统资源可以提高算法的可扩展性。

事务并发控制

ABM算法使用乐观并发控制,这可能会导致事务冲突和重试。高事务冲突率会降低ABM算法的可扩展性。

#结论

ABM算法是一种可扩展的OCC算法,它可以处理大量并发请求。算法的可扩展性受并发性水平、数据访问模式、系统资源和事务并发控制等因素的影响。通过优化这些因素,可以提高ABM算法的可扩展性,从而支持高性能并发系统。第八部分无锁并发控制的发展趋势关键词关键要点主题名称】:可扩展无锁并发控制

-基于分片和并行处理技术,将数据库划分成多个可独立操作的分片,每个分片采用无锁并发控制算法,提高并发处理能力。

-采用分布式事务机制,保证跨分片事务的原子性、一致性、隔离性和持久性。

-结合云计算和边缘计算技术,将无锁并发控制算法部署在分布式系统中,实现可扩展的并发控制能力。

主题名称】:多版本无锁并发控制

无锁并发控制算法发展趋势

无锁并发控制(Lock-freeConcurrencyControl)是计算机科学领域近年发展的热门方向,因其在高并发系统中的优越性能而受到广泛关注。该算法通过消除传统加锁机制,采用非阻塞技术,实现并发操作的有效协调,避免了死锁和饥饿问题。

随着研究的深入,无锁并发控制算法不断发展,呈现出以下趋势:

1.多核并发性

随着多核处理器技术的普及,无锁并发控制算法需要支持多核并发的环境。研究重点是如何充分利用多核系统的并行计算能力,优化算法的效率和扩展性。

2.可扩展性

在分布式系统和大规模数据库等大型并行环境中,无锁并发控制算法的可扩展性至关重要。算法需要能够在高负载下维持高性能,并随着系统规模的增加而有效扩展。

3.弹性和容错性

无锁并发控制算法需要增强弹性,以应对系统故障和错误。算法需要能够在节点或链接故障的情况下继续运行,并避免数据损坏或不一致性。

4.高效的内存管理

无锁并发控制算法需要高效地管理内存,以避免碎片化和性能下降。研究方向包括优化内存分配策略、减少内存开销以及支持持久性存储。

5.硬件支持

硬件技术的进步为无锁并发控制算法提供了新的可能性。例如,事务性内存(TransactionalMemory)等特性可以原生支持无锁操作,提高算法的效率和正确性。

6.算法多样性和优化

无锁并发控制算法的研究出现了算法多样化的趋势,不同算法针对特定应用场景和性能需求进行优化。研究人员不断提出新的算法,探索不同的设计思想和技术,以提升算法的性能和适用性。

7.应用场景拓展

无锁并发控制算法的应用场景正在不断拓展,包括数据库管理系统、实时系统、云计算平台和多媒体处理等领域。其优越的并发性、可扩展性和容错性使其成为这些应用场景中有效的并发控制解决方案。

8.理论基础完善

无锁并发控制算法的发展离不开理论基础的完善。研究人员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论