c++中weak_ptr到底是干啥用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中weak_ptr到底是干啥用的?相关的知识,希望对你有一定的参考价值。

如题,看得我稀里糊涂还看不懂。c++第五版。

按照我的理解,weak_ptr只能跟踪一个共享的资源,但并不实际拥有,也不会阻碍资源被释放
读取共享的资源前需要执行lock,得到shared_ptr之后才能访问追问

那发明它是为了做啥呢?就是在啥情况会用啊?我就是要个很容易理解的概念,不然好难理解

追答

当两个对象需要互相引用的时候,我们总希望其中一个对象拥有另外一个对象的强引用,而另外一个对象拥有自己的弱引用

如果两个对象都是强引用,则容易引起循环引用,导致两个对象都无法正确释放

追问

我好像有点理解了,能再说的具体一点不?比如说呢?一个强引用一个弱引用会发生什么呢?

追答

假如A拥有B的强引用,B拥有A的弱引用
那么A被析构的时候,B的计数器会减1,有可能导致B的析构
但是B无法在A之前被析构,因为A拥有B的强引用

举个例子
汽车A应该拥有引擎B的强引用,引擎B应该拥有汽车A的弱引用
因为当汽车A报废的时候,引擎B应该被自动析构,除非引擎B也被其他汽车C使用着
但是引擎B不应该被析构,因为汽车A正使用着他

但是引擎B不应该拥有对汽车A的强引用,因为引擎B拥有汽车A的强引用的话,即便不再有人拥有这辆汽车A,但是因为引擎B对汽车A的强引用,导致汽车A在“被使用者”,所以汽车A和引擎B形成循环引用,两者均无法正确被释放

参考技术A   weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*和->但可以使用lock获得一个可用的shared_ptr对象。
  weak_ptr的一个重要用途是通过lock获得this指针的shared_ptr,使对象自己能够生产shared_ptr来管理自己,但助手类enable_shared_from_this的shared_from_this会返回this的shared_ptr,只需要让想被shared_ptr管理的类从它继承即可。

Hadoop到底是干啥用的?

用途:将单机的工作任务进行分拆,变成协同工作的集群。用以解决日益增加的文件存储量和数据量瓶颈。

通俗应用解释:

比如计算一个100M的文本文件中的单词的个数,这个文本文件有若干行,每行有若干个单词,每行的单词与单词之间都是以空格键分开的。对于处理这种100M量级数据的计算任务,把这个100M的文件拷贝到自己的电脑上,然后写个计算程序就能完成计算。

关键技术:

HDFS(Hadoop Distributed File System):

既可以是Hadoop 集群的一部分,也可以是一个独立的分布式文件系统,是开源免费的大数据处理文件存储系统。

HDFS是Master和Slave的主从结构(是一种概念模型,将设备分为主设备和从设备,主设备负责分配工作并整合结果,或作为指令的来源;从设备负责完成工作,一般只能和主设备通信)。主要由Name-Node、Secondary NameNode、DataNode构成。

Name-Node:分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等

Secondary NameNode:辅助 NameNode,分担其工作,紧急情况可以辅助恢复

DataNode:Slave节点,实际存储数据、执行数据块的读写并汇报存储信息给NameNode

HDFS客户端的存储流程:当客户需要写数据时,先在NameNode 上创建文件结构并确定数据块副本将要写道哪几个 datanode ,然后将多个代写 DataNode 组成一个写数据管道,保证写入过程完整统一写入。

读取数据时则先通过 NameNode 找到存储数据块副本的所有 DataNode ,根据与读取客户端距离排序数据块,然后取最近的。

参考技术A

提供海量数据存储和计算的。需要java语言基础。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

Hadoop优点:

1、高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

2、高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

3、效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

4、高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

5、低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

参考技术B

Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。

Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理 。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据 。此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。

Hadoop大数据处理的意义

Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。Hadoop的分布式架构,将大数据处理引擎尽可能的靠近存储,对例如像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储。

Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)到数据仓库里

参考技术C

提供海量数据存储和计算的。需要java语言基础。

Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。

HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进行分布式储存和读取。

MapReduce是一个计算框架:MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算/Reduce计算)再根据任务调度器(JobTracker)对任务进行分布式计算。

Hadoop的功能

1、大数据存储:分布式存储

2、日志处理:擅长日志分析

3、ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库

4、机器学习:比如Apache Mahout项目

5、搜索引擎:Hadoop + lucene实现

6、数据挖掘:目前比较流行的广告推荐,个性化广告推荐

Hadoop是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。

以上是关于c++中weak_ptr到底是干啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

Telnet 命令到底是干啥用的?怎么用?

PowerDesigner到底是干啥用的?

谁可以简单介绍一下docker到底是干啥用的?

C#里的DataSet到底是干啥用的,怎么用?哪位高手帮我讲解讲解,谢谢啦!

SendMessage函数是干啥用的 它都有哪些参数

python中函数参数列表中使用的 冒号是干啥用的