高并发系统下数据结构选取_第1页
高并发系统下数据结构选取_第2页
高并发系统下数据结构选取_第3页
高并发系统下数据结构选取_第4页
高并发系统下数据结构选取_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1/1高并发系统下数据结构选取第一部分数据结构的特性与系统并发度 2第二部分针对高并发场景的常见数据结构 4第三部分互斥机制在并发数据结构中的作用 6第四部分无锁数据结构的实现原理 9第五部分有序和无序并发数据结构的差异 11第六部分缓存一致性模型对数据结构的影响 13第七部分分布式高并发数据结构的选取原则 17第八部分数据结构选取在系统优化中的应用 20

第一部分数据结构的特性与系统并发度关键词关键要点【数据结构的特性与系统并发度】

主题名称:并发性和数据一致性

1.并发操作下,数据一致性至关重要,需要仔细选择数据结构以确保数据的完整性和准确性。

2.读写锁、CAS(比较并交换)操作和锁分片等机制可以有效地管理并发访问,防止数据损坏或丢失。

3.了解数据结构对并发性的影响并采取适当的措施至关重要,以确保高并发系统中数据的可靠性和可预测性。

主题名称:数据粒度优化

数据结构的特性与系统并发度

在高并发系统中,数据结构的选择对于系统性能和吞吐量至关重要。不同的数据结构具有不同的特性,适合于不同的并发度场景。

并发度低

在并发度较低的情况下(例如,每秒处理的请求数小于100),最简单的锁机制,如互斥量或自旋锁,即可满足系统需求。此时,考虑数据结构的性能比考虑并发性更为重要。

对于这种情况,以下数据结构是合适的:

*数组:线性数据结构,访问和插入效率高,但并发修改难度较大。

*链表:动态数据结构,插入和删除效率高,但随机访问效率低。

*哈希表:基于哈希函数的非线性数据结构,查找和插入效率高,但需要考虑哈希冲突问题。

并发度中

在并发度中等的情况下(例如,每秒处理的请求数在100-1000之间),需要考虑使用非阻塞数据结构或并发容器来提高系统的吞吐量。

非阻塞数据结构不使用锁机制,而是采用乐观并发控制或无锁算法来实现并发访问。并发容器则通过提供线程安全的迭代器和原子操作来简化并发编程。

对于这种情况,以下数据结构是合适的:

*无锁队列:基于CAS(比较并交换)操作实现的先进先出队列,并发修改和访问效率高。

*并发哈希表:基于锁分段技术实现的哈希表,支持并发插入、删除和查找操作。

*Copy-on-Write容器:一种特殊的容器,当容器中的元素被修改时,会创建一个新的副本,从而避免对原容器的并发修改。

并发度高

在并发度较高的情况下(例如,每秒处理的请求数大于1000),需要考虑使用无锁数据结构或分布式数据结构来进一步提高系统的可扩展性和吞吐量。

无锁数据结构不依赖任何锁机制,而是通过算法设计来保证并发访问的正确性。分布式数据结构将数据分散存储在多个节点上,以提高并发访问的吞吐量。

对于这种情况,以下数据结构是合适的:

*基于链表的无锁队列:一种基于链表实现的无锁队列,支持高效的并发插入、删除和访问操作。

*基于树的无锁数据结构:一种基于树结构实现的无锁数据结构,支持高效的并发查询和更新操作。

*分布式哈希表:将哈希表的数据分散存储在多个节点上,支持大规模的并发访问。

*分布式锁服务:一种分布式服务,提供可扩展的锁机制,可以满足高并发系统的并发控制需求。

总结

在高并发系统中,数据结构的选择应根据系统的并发度、性能要求和可扩展性需求来综合考虑。通过正确地选择数据结构,可以有效地提高系统的吞吐量和响应时间,从而满足高并发系统的要求。第二部分针对高并发场景的常见数据结构关键词关键要点主题名称:哈希表

1.以键值对形式存储数据,通过散列函数将键映射到数组索引,快速查找和插入操作。

2.冲突处理机制,如链地址法和开放寻址法,解决不同键哈希到相同索引的情况。

3.在高并发系统中,哈希表可有效避免锁冲突,通过分桶技术提高并发访问性能。

主题名称:跳跃表

针对高并发场景的常见数据结构

哈希表

*一种快速查找数据结构,通过哈希函数将键映射到值。

*高并发环境下,哈希冲突导致性能下降,可以通过使用更大的哈希表、链式哈希或使用多个哈希函数来解决。

跳表

*一种基于链表的数据结构,使用多分辨率来优化查找和插入操作。

*在高并发场景中,跳表可以保证较高的吞吐量,并且插入和删除操作的时间复杂度为O(logn)。

并发字典

*一种专门针对并发环境设计的字典数据结构,提供线程安全的操作。

*常用的并发字典包括ConcurrentHashMap和ConcurrentDictionary。

无锁队列

*一种非阻塞队列,允许并发操作,避免锁竞争。

*常用的无锁队列包括ConcurrentLinkedQueue和Disruptor。

读写锁

*一种同步机制,允许多个线程同时读取数据,但只能有一个线程同时写入数据。

*读写锁可以减少写操作的竞争,从而提高读操作的吞吐量。

原子变量

*一种线程安全的变量,保证并发读写操作的原子性。

*原子变量常用于共享变量的更新和计数。

并发栈

*一种线程安全的栈数据结构,提供并发push和pop操作。

*常用的并发栈包括ConcurrentLinkedStack和Java8中的Stack。

分段锁

*一种同步机制,将数据结构划分为多个段,并为每个段分配独立的锁。

*分段锁允许并发访问不同段中的数据,从而减少锁竞争。

栅栏

*一种内存屏障,确保在栅栏之前和之后的内存操作按照程序顺序执行。

*栅栏用于控制线程之间的可见性和一致性。

选择适合的数据结构

在高并发场景中选择合适的数据结构需要考虑以下因素:

*并发性:数据结构的并发访问能力。

*插入和删除操作的频率:影响数据结构的效率。

*数据量:影响数据结构的大小和内存占用。

*特殊要求:特定应用场景下的特殊需求,如有序性、FIFO或LIFO等。

在实践中,经常需要通过权衡这些因素来选择最合适的数据结构。第三部分互斥机制在并发数据结构中的作用关键词关键要点【互斥机制在并发数据结构中的作用】

1.实现原子性操作:互斥机制确保同时只有一个线程可以访问共享数据,防止同时对数据进行修改,从而保证操作的原子性。

2.预防竞争条件:互斥机制避免多个线程同时修改共享数据,从而消除竞争条件,保障数据的完整性和一致性。

3.维持数据一致性:互斥机制通过协调线程访问共享数据,防止数据被并发修改,从而维持数据的一致性。

【临界区和互斥量】

互斥机制在并发数据结构中的作用

在并行系统中,多个线程可以同时访问共享数据结构,这可能会导致竞争和数据不一致性。为了解决这个问题,引入了互斥机制,它允许一次只有一个线程访问共享资源。

什么是互斥机制?

互斥机制是一种同步机制,用于防止多个线程同时执行关键部分的代码。关键部分包含对共享数据的修改或需要排他访问的任何其他操作。互斥机制确保一个线程进入关键部分后,其他线程必须等待,直到该线程退出关键部分。

互斥机制的类型

有几种类型的互斥机制,包括:

*软件互斥锁:使用原子操作(如test-and-set或compare-and-swap)实现的软件机制。

*硬件互斥锁:使用硬件提供的特殊指令(如LOCK前缀在x86架构中)实现的硬件机制。

*信号量:一种更高级别的同步机制,除了互斥功能外,还允许线程等待和通知其他线程。

互斥机制在并发数据结构中的应用

互斥机制在并发数据结构中至关重要,因为它保证了对共享数据的原子访问,防止数据竞争和不一致性。例如,考虑一个并发队列:

*如果没有互斥机制,多个线程可以同时尝试从队列的头端删除元素,这可能会导致数据丢失或损坏。

*通过使用互斥机制,可以确保一次只有一个线程访问队列的头端,从而防止竞争和确保数据完整性。

常见互斥机制选项

在并发数据结构中,最常用的互斥机制选项包括:

*自旋锁:一种轻量级互斥锁,当一个线程试图进入关键部分时,会不断循环(自旋),直到锁可用。

*互斥锁:一种阻塞式互斥锁,当一个线程试图进入关键部分时,如果锁不可用,则会将其挂起,直到锁可用。

*读写锁:一种允许多个线程同时以只读方式访问共享资源,但仅允许一个线程以写入方式访问的互斥锁。

互斥机制设计的考虑因素

设计并发数据结构中的互斥机制时,需要考虑以下因素:

*性能:互斥机制应该具有较低的开销,以最大限度地减少对系统性能的影响。

*可伸缩性:互斥机制应该能够在多核或分布式系统中有效工作。

*公平性:互斥机制应该公平地允许所有线程访问共享资源,防止饥饿。

*可重入性:互斥机制应该允许同一个线程嵌套进入关键部分,而不会导致死锁。

结论

互斥机制在并发数据结构中至关重要,因为它提供了共享数据访问的原子性,防止竞争和确保数据完整性。了解可用的互斥机制选项和设计考虑因素对于创建高性能和可伸缩的并发数据结构至关重要。第四部分无锁数据结构的实现原理关键词关键要点CAS操作

1.CAS(Compare-And-Swap)操作是一个原子指令,它将内存中的一个值与预期值进行比较,如果相等,则将新值写入该内存地址。

2.CAS操作保证了线程之间的原子性,即要么操作成功完成,要么不执行任何操作,从而避免了竞态条件。

3.CAS操作广泛用于无锁数据结构的实现,如链表、队列和哈希表。

乐观并发控制

无锁数据结构的实现原理

无锁数据结构是一种无需使用锁机制即可并发访问和修改的数据结构。其实现原理通常基于以下机制:

1.原子操作

原子操作是指一个不可中断的操作,要么完全执行,要么完全不执行。无锁数据结构通过将关键操作设计成原子操作,从而避免并发访问时产生竞争条件。例如,CAS(Compare-And-Swap)操作可以原子地比较和交换一个内存位置的值。

2.乐观并发

乐观并发假设并发访问不会导致数据冲突。在这种机制下,线程在进行修改操作之前不会获取锁。如果发现数据已发生变化,则回滚操作并重试。通过减少锁竞争,乐观并发可以显著提高并发性。

3.无锁队列

无锁队列通常采用链表或环形缓冲区实现。链表实现使用CAS操作来更新节点指针,环形缓冲区实现使用CAS操作来更新生产者和消费者的索引。这些机制确保队列操作的原子性,避免并发访问时出现数据丢失或损坏。

4.无锁哈希表

无锁哈希表通常采用分桶技术,每个桶是一个无锁队列或链表。线程可以并发访问不同桶,避免锁竞争。一些无锁哈希表还使用CAS操作来更新桶指针,进一步提高并发性。

5.无锁树

无锁树通常采用基于CAS的并发更新机制。例如,红黑树可以采用基于CAS的旋转操作来保持树的平衡。无锁树可以支持并发查找、插入和删除操作,适用于需要层次结构的数据组织场景。

无锁数据结构的优点:

*高并发性:通过消除锁机制,无锁数据结构可以大幅提高并发访问的吞吐量。

*低延迟:无锁操作避免了锁竞争和上下文的切换,降低了访问延迟。

*可扩展性:无锁数据结构可以轻松扩展到多核或分布式系统中,以提高处理能力。

无锁数据结构的缺点:

*复杂性:无锁数据结构的实现原理较为复杂,需要对底层硬件和内存模型有深入了解。

*开销:无锁操作通常需要更多的处理器指令,可能会导致一些性能开销。

*适用性:无锁数据结构并不适用于所有场景。在某些情况下,锁机制可以提供更好的性能或安全性。

总之,无锁数据结构通过原子操作、乐观并发和无锁队列等机制,可以实现高并发访问和修改,适用于对并发性要求极高的系统中。然而,其复杂性和性能开销也需要考虑。第五部分有序和无序并发数据结构的差异有序和无序并发数据结构的差异

概述

在高并发系统中,数据结构的选择对于保证系统性能和正确性至关重要。主要的数据结构类型包括有序和无序数据结构,每种类型都有其独特的优点和缺点,适用于不同的场景。

有序数据结构

有序数据结构按照特定规则对元素进行排序,例如从小到大或从大到小。它们允许快速查找和检索具有特定值或范围内的元素。

优点:

*快速查找:可以在对数时间复杂度(O(logn))内查找特定元素。

*高效范围查询:可以在对数时间复杂度(O(logn))内查找指定范围内的元素。

*插入和删除有序:可以高效地插入和删除元素,同时保持有序性。

缺点:

*插入和删除缓慢:插入和删除元素的时间复杂度为O(n),因为需要移动其他元素以保持有序性。

*对并发访问敏感:当多个线程同时修改数据结构时,需要额外的同步机制来保证有序性。

无序数据结构

无序数据结构不遵循特定的顺序规则,元素的排列是任意的。它们擅长快速插入和删除,但不支持快速查找和范围查询。

优点:

*快速插入和删除:可以以恒定时间复杂度(O(1))插入和删除元素。

*对并发访问友好:对并发访问具有较高的容忍度,因为元素的顺序无关紧要。

缺点:

*慢速查找:查找特定元素的时间复杂度为O(n),因为需要遍历整个数据结构。

*不支持范围查询:无法高效地查找指定范围内的元素。

*可能出现哈希冲突:如果元素的哈希值相等,可能会发生哈希冲突,导致查找和插入性能下降。

选择标准

选择有序或无序数据结构取决于应用程序的具体需求:

*需要快速查找或范围查询:选择有序数据结构。

*需要快速插入和删除:选择无序数据结构。

*并发访问频繁:选择对并发访问友好的无序数据结构。

*元素数量较大:考虑使用基于树或哈希的更高效的数据结构。

常见的有序数据结构

*平衡二叉树(红黑树):具有对数时间复杂度的查找、插入和删除。

*B树:适用于大数据集的平衡多路搜索树。

*有序数组:支持快速查找,但插入和删除成本较高。

常见的无序数据结构

*哈希表(哈希映射):使用哈希函数对元素快速查找和插入。

*链表:允许高效的插入和删除,但查找元素需要遍历整个链表。

*无序数组:支持快速的插入,但查找和删除元素需要遍历整个数组。第六部分缓存一致性模型对数据结构的影响关键词关键要点顺序一致性模型

1.保证处理器执行指令的顺序与程序中编写的顺序相同,即程序中后执行的指令必定在处理器中后执行。

2.对于多处理器系统,该模型可确保所有处理器看到的共享内存的修改顺序一致,避免数据不一致问题。

3.顺序一致性模型的实现成本较高,通常用于对数据一致性要求较高的场景中。

松散一致性模型

1.允许处理器以不同的顺序执行指令,但最终保证所有处理器看到的共享内存中的数据值是一致的。

2.相比于顺序一致性模型,该模型的实现成本较低,可以提高系统性能。

3.松散一致性模型适用于对数据一致性要求不那么严格的场景,如缓存系统等。

因果一致性模型

1.保证因果关系的顺序一致性,即如果事件A导致事件B,那么所有处理器看到的事件B发生在事件A之后。

2.该模型比顺序一致性模型开销更小,同时提供比松散一致性模型更强的保证。

3.因果一致性模型适用于对因果关系一致性要求较高的场景,如分布式事务系统等。

最终一致性模型

1.允许副本之间的数据暂时不一致,但最终保证所有副本的数据最终一致。

2.该模型实现简单,开销最小,适用于对数据一致性要求最低的场景,如缓存系统等。

3.最终一致性模型不保证数据的立即一致性,可能存在短暂的数据不一致窗口。

单写一致性模型

1.保证对共享内存的写操作串行执行,即同一时刻只能有一个处理器执行写操作。

2.该模型确保了写操作的原子性和隔离性,适用于对写操作一致性要求较高的场景,如数据库系统等。

3.单写一致性模型的实现成本较高,可能影响系统性能。

读己写一致性模型

1.保证处理器对自己的写操作立即可见,但对其他处理器对共享内存的写操作可能不可见。

2.这种模型的实现成本较低,并且适用于对读一致性要求较高但对写一致性要求相对较低的场景,如Web缓存系统等。

3.读己写一致性模型不保证其他处理器看到的写入顺序,可能存在数据不一致的问题。缓存一致性模型对数据结构的影响

在高并发系统中,缓存发挥着至关重要的作用。不同的缓存一致性模型对数据结构的选择至关重要,对其性能、正确性和复杂性都有显著影响。

强一致性模型

*顺序一致性(SI):缓存中的操作必须按照调用顺序执行,与在内存中执行相同。

*线性一致性(LI):缓存中的所有操作必须对同一副本执行,并且所有副本必须接收相同顺序的更新。

强一致性模型对数据结构的影响:

*优点:提供最高级别的正确性,确保所有读写操作都能看到最新的数据。

*缺点:维护缓存一致性非常昂贵,写入操作会产生大量的开销,降低系统吞吐量。

*数据结构选择:要求使用支持事务或锁的复杂数据结构,以确保原子性和一致性。

弱一致性模型

*最终一致性(EC):缓存中的更新最终会传播到所有副本,但不需要立即生效。

*因果一致性(CC):如果操作A在操作B之前执行,那么对A的读取将总是返回在B之前写入的数据。

*单调读一致性(MRC):对同一对象的连续读取将始终返回相同的数据或较新版本的数据。

弱一致性模型对数据结构的影响:

*优点:开销较低,吞吐量更高。

*缺点:可能会出现数据不一致的情况,这可能导致不正确的计算结果。

*数据结构选择:使用无锁、非阻塞的数据结构,例如分段计数器或原子计数器。

混合一致性模型

*条件一致性(CC):允许一定程度的数据不一致,但仅在特定条件下。

*读-写一致性(RC):提供对写入操作的强一致性,而对读取操作使用弱一致性。

*单副本一致性(SSC):仅允许一个缓存副本保持最新的状态,其他副本最终会通过复制或同步达到一致性。

混合一致性模型对数据结构的影响:

*优点:平衡了正确性和性能,根据不同的应用需求进行调整。

*缺点:可能需要复杂的实现,并且需要仔细考虑数据结构的粒度和同步策略。

*数据结构选择:取决于特定的混合一致性模型,通常需要定制数据结构或使用现成的库。

选择数据结构的准则

选择数据结构时,需要综合考虑以下因素:

*一致性要求:应用所需的数据一致性级别。

*性能需求:写入和读取操作的吞吐量和延迟要求。

*复杂性:数据结构实现和维护的难度。

*并发性:系统中并发访问数据的数量。

*可用性:缓存不可用时的数据持久性机制。

结论

缓存一致性模型对数据结构的选择具有深远的影响。根据应用的具体要求,选择适当的一致性模型和数据结构非常重要。强一致性模型提供最高级别的正确性,但开销也最高。弱一致性模型提供了更高的吞吐量,但可能会导致数据不一致。混合一致性模型提供了折衷方案,平衡了正确性和性能。通过仔细考虑这些因素,可以为高并发系统选择最佳的数据结构,以满足性能、正确性和复杂性的需求。第七部分分布式高并发数据结构的选取原则关键词关键要点主题名称:一致性模型

1.强一致性:所有副本在任何时刻都保持完全一致,读取操作总是返回最新的已提交值。

2.弱一致性:副本之间可能存在短暂的不一致,但最终会收敛到一致状态。

3.最终一致性:副本间最终会一致,但可能需要一定时间才能达到一致性。

主题名称:容错性

分布式高并发数据结构的选取原则

在高并发分布式系统中,选择合适的数据结构至关重要。以下原则指导数据结构的选取:

1.一致性

数据结构必须确保在高并发场景下数据的强一致性或弱一致性。强一致性要求所有副本数据在所有时刻保持完全一致,而弱一致性允许短暂的不一致性。选择取决于应用场景对数据一致性的要求。

2.可用性

数据结构应具有较高的可用性,即即使在某些节点或网络故障的情况下,也能够提供数据操作服务。例如,分布式哈希表(DHT)通过数据副本冗余提高可用性。

3.扩展性

数据结构应支持系统容量的扩展,以满足不断增长的数据量和并发请求。水平扩展通过添加更多节点来提高系统容量,而垂直扩展通过升级现有节点来提高性能。

4.性能

数据结构的性能应满足系统对吞吐量、延迟和响应时间的需求。考虑因素包括数据访问模式、并发级别和数据量级。

5.可靠性

数据结构应具有容错能力,能够在发生节点故障或网络中断时保持数据和操作的完整性。可靠性机制包括数据备份、容错算法和自动恢复机制。

6.复杂性

数据结构的复杂性应与系统要求相匹配。复杂的结构可能提高性能,但也增加实现和维护成本。选择应权衡性能和复杂性。

7.成本

数据结构的成本包括硬件、软件、开发和维护费用。选择应考虑总拥有成本以及与性能和可用性要求的权衡。

具体数据结构

常见的高并发分布式数据结构包括:

*分布式哈希表(DHT):用于在分布式系统中存储和检索键值对,提供一致性和可扩展性。

*分布式队列(DQ):用于处理大量的生产者和消费者,支持高吞吐量和低延迟消息传递。

*分布式锁(DL):用于协调并发访问共享资源,防止数据不一致和竞态条件。

*分布式计数器(DC):用于维护和更新共享计数器,提供强一致性或弱一致性。

*分布式缓存(DCache):用于存储和管理常用数据,提高访问速度和减少数据库负载。

选取流程

数据结构的选取应遵循以下流程:

1.分析应用场景:确定对一致性、可用性、扩展性、性能、可靠性、复杂性和成本的要求。

2.研究数据结构:调查各种分布式数据结构并评估其优缺点。

3.权衡选择:根据应用场景和数据结构特性,权衡不同选项的利弊。

4.原型和测试:构建数据结构的原型并进行性能和可靠性测试,验证其是否满足系统要求。

5.实施和维护:将选定的数据结构集成到系统中,并持续监控和维护其性能和可用性。第八部分数据结构选取在系统优化中的应用关键词关键要点主题名称:数据结构在高并发场景下的选择考量

1.吞吐量和响应时间:数据结构对系统的吞吐量和响应时间有直接影响。选择合适的结构可以优化处理能力,减少延迟。

2.并发控制:在高并发环境下,需要考虑并发控制机制来避免数据不一致性。选择支持并发访问和更新的数据结构至关重要。

3.内存使用:数据结构的选择会影响系统对内存的占用情况。在内存受限的环境中,需要考虑节省空间的数据结构。

主题名称:数据结构对系统可扩展性的影响

数据结构选取在系统优化中的应用

在高并发系统中,数据结构选择至关重要,直接影响系统的性能和伸缩性。通过合理选择数据结构,可以有效优化系统,提高吞吐量和响应时间。

#针对不同类型数据和访问模式的数据结构

-队列(FIFO):适合处理按顺序到达和处理请求的场景,例如消息队列和任务队列。它遵循先进先出(FIFO)原则,确保按顺序处理请求。

-栈(LIFO):类似于队列,但遵循后进先出(LIFO)原则。通常用于递归调用、函数返回值和历史记录管理。

-链表:用于存储和检索可变长度的数据序列。链表中的每个元素包含指向下一个元素的指针,形成链式结构。它支持高效的插入和删除操作。

-数组:用于存储和检索固定长度的数据序列。数组中的每个元素都通过其索引访问。它支持快速随机访问,但插入和删除操作效率较低。

-哈希表:用于快速查找和检索以键值对形式存储的数据。哈希表使用哈希函数将键映射到存储位置,从而提供O(1)时间复杂度的查找和插入操作。

-树:用于存储和检索数据结构中的层次关系。树中每个节点包含数据和指向子节点的指针。树支持高效的查询和范围查询。

-图:用于存储和检索数据之间的连接和关系。图中的节点表示实体,边表示它们之间的连接。图支持复杂的连接查询和路径查找。

#数据结构与并发性的关系

在高并发系统中,数据结构的并发性至关重要。以下是一些常用的并发数据结构:

-无锁数据结构:不需要锁定或同步即可安全访问的数据结构。它们提供了高性能,但可能存在数据一致性问题。

-锁数据结构:使用锁或其他同步机制来管理对数据结构的访问。它们可以确保数据一致性,但可能会导致性能下降。

-原子数据结构:提供原子操作,确保对数据结构的操作在并发环境中是原子和不可分割的。它们提供了强大的并发性保证,但性能通常较低。

#数据结构选取对系统优化

适当的数据结构选取可以显著优化高

温馨提示

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

评论

0/150

提交评论