空间数据

Java I/O体系原理

℡╲_俬逩灬. 提交于 2020-01-29 00:20:15
基础概念 在介绍I/O原理之前,先重温几个基础概念: (1) 操作系统与内核 操作系统:管理计算机硬件与软件资源的系统软件内核:操作系统的核心软件,负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,为应用程序提供对计算机硬件的安全访问服务 2 内核空间和用户空间 为了避免用户进程直接操作内核,保证内核安全,操作系统将内存寻址空间划分为两部分:内核空间(Kernel-space),供内核程序使用用户空间(User-space),供用户进程使用 为了安全,内核空间和用户空间是隔离的,即使用户的程序崩溃了,内核也不受影响 3 数据流 计算机中的数据是基于随着时间变换高低电压信号传输的,这些数据信号连续不断,有着固定的传输方向,类似水管中水的流动,因此抽象数据流(I/O流)的概念:指一组有顺序的、有起点和终点的字节集合, 抽象出数据流的作用:实现程序逻辑与底层硬件解耦,通过引入数据流作为程序与硬件设备之间的抽象层,面向通用的数据流输入输出接口编程,而不是具体硬件特性,程序和底层硬件可以独立灵活替换和扩展 I/O 工作原理 1 磁盘I/O 典型I/O读写磁盘工作原理如下: tips: DMA:全称叫直接内存存取(Direct Memory Access),是一种允许外围设备(硬件子系统)直接访问系统主内存的机制。基于 DMA 访问方式,系统主内存与硬件设备的数据传输可以省去CPU

JS基础--数据在内存中的表现

坚强是说给别人听的谎言 提交于 2020-01-28 18:20:19
1、基本数据类型在内存中的存储 var str1 = 'aa'; var str2 = str1;//在栈中另外开辟一个空间存储str2,并将str1中的内容复制到str2中 str1 = 'bb'; console.log(str1);//bb console.log(str2);//aa 2、复杂数据类型在内存中的存储 //在堆区创建对象,在栈区分配空间并指向堆区对象 //首先p1指向栈区地址,栈区指向堆区空间Person //p2 = p1:在栈区又开辟一块地址,且指向堆区同一对象Person //所以修改p1,也会修改p2 function Person(name,age){ this.name = name; this.age = age; } var p1 = new Person('aa',23); var p2 = p1; p1.name = 'bb'; console.log(p1.name);//bb console.log(p2.name);//bb 3、基本类型作为函数的参数 var num1 = 10,num2 = 20;//num1,num2在栈区 fn(num1,num2); console.log(num1);//10 console.log(num2);//20 function fn(n1,n2){//函数在堆区,但是形参n1

进程、线程、以及它们之间的区别与联系

我的未来我决定 提交于 2020-01-28 15:06:08
一、进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念。当内存中多个程序存在时,如果不对人们熟悉的“程序”的概念加以扩充,就无法刻画多个程序共同运行时系统呈现出的特征。 多道程序设计:是指允许多个作业(程序)同时进入计算机系统的内存并启动交替计算的方法。 也就是说,内存中多个相互独立的程序均处于开始和结束之间。 从宏观上看是并行的,多道程序都处于运行过程中,但尚未运行结束; 从微观角度上看是串行的,各道程序轮流的占用CPU交替的执行。 引入多道程序设计技术可以提高CPU的利用率,充分发挥计算机硬部件的并行性。 多道程序系统中,程序具有:并行、制约以及动态的特征。程序概念难以便是和反映系统中的情况,所以引入了进程这一概念。 1.2 程序是什么 说起进程,就不得不说下程序。先看定义:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个 静态 的概念。系统实际上是出于不断变化的状态中,程序不能反映这种动态性。 而进程则是在处理机上的一次执行过程,它是一个 动态 的概念。这个不难理解,其实进程是包含程序的,进程的执行离不开程序,进程中的文本区域就是代码区,也就是程序。 1.3 进程是什么 1.3.1 进程的概念 进程的定义: 进程是据有独立功能的程序在某个数据集合上的一次运行活动

AVFrame 解析

无人久伴 提交于 2020-01-26 23:41:39
AVFrame: 1) 存储解码后的音频数据或视频数据. 2) AVFrame必须由av_frame_alloc() 来创建(Note:这只是用来创建AVFrame自身的内存空间,AVFrame结构体中的数据缓冲区,必须由其他方法来管理) 3) AVFrame必须由av_frame_free来释放 4) AVFrame通常只申请一次空间,然后多次复用来保存不同的数据(例如:一个AVFrame存放从解码器接收到的帧),在这种情况下,使用av_frame_unref(),引用计数-1,当引用计数为0时,释放data空间,并且在复用该数据前,会重置该结构体数据,还原成最原始的状态 注: In such a case, av_frame_unref() will free any references held by the frame and reset it to its original clean state before it is reused again. (这尼玛 翻译过来不是释放所有引用?是指引用计数直接变成0,然后释放data内存空间?而不是减一?) 5) 后面还有,不翻译了。。。。。。 来源: https://www.cnblogs.com/helloc14/p/12235033.html

JVM 的内存模型

折月煮酒 提交于 2020-01-26 18:56:17
为什么要了解? 很多做Android开发的同学会问,我们为什么要了解这个呢?首先移动端资源有限,我们了解jvm的内存模型,便于我们更好的管理客户端的内存。 什么是JVM? java代码的执行过程如下图: 运行时数据区可分为:方法区、堆、虚拟机栈、本地方法栈、程序计数器五个部分。 概述 方法区:线程共享数据,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 堆:线程共享数据,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。 虚拟机栈:线程隔离数据,每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 本地方法栈:线程隔离数据,区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 程序计数器:线程隔离数据,字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成。 1.方法区  

迁移学习五——GFK

点点圈 提交于 2020-01-26 03:14:00
本篇文章是对《Geodesic Flow Kernel for Unsupervised Domain Adaptation》的学习。 格拉斯曼流形 在讲述GFK之前我们先引入一个概念,即格拉斯曼流形。百度百科中的定义: 设W是n维向量空间,考虑W中全体k维子空间构成的集合G=Grass(k,W),因为G上有自然的流形结构,所以我们将它称为格拉斯曼流形。 关于这个定义我们并不需要深究,只要知道n维空间的所有k维子空间构成了一个流形结构即可。 1 SGF 之前博客讲的方法均是将源域和目标域数据映射到同一个空间中,SGF(Sampling Geodesic Flow)则引入了格拉斯曼流形,将源域和目标域看做这个流形结构中的两个点,并构建从源域到目标域的测地线,测地线上的每个点可以看作是一个子空间,通过将数据映射在该测地线上的不同子空间,并进行分析,学习算法可以很好地提取较为恒定的特征(即在子空间变化的过程中较为稳定的一部分)。一个直观的理解就是汽车出发地驶向目的地,这个过程中车身会位移,会旋转,运气不好出现点剐蹭还会发生一些形变,但整个过程车的型号、车牌号、具体的一些硬件配置等等是不会变化的,对车辆在行驶过程的影像进行分析,可以获取这些稳定的特征,用于接下来的特定任务场景中。 SGF的步骤大体如下:(1)构建连接源域和目标域的测地线;(2)对测地线进行采样,获取若干子空间;(3

mysql索引的使用

为君一笑 提交于 2020-01-25 18:11:24
什么是索引?为什么要建立索引?索引分类?索引的使用? 转载SQL(五) MySQL中的索引详讲 一、索引介绍:   索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花费的时间就越多。如果表中查询的列有索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。   例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。   如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。   如果有了索引,那么会将 Phone 字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。其中MySQL中的索引的存储类型有两种:BTREE、HASH。 也就是用树或者Hash值来存储该字段,更详细的查找逻辑就需要会算法的知识了。我们现在只需要知道索引的作用,功能是什么就行。 二、索引优缺点: 优点:   1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引。   2、大大加快数据的查询速度。 缺点:   1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。  

MySQL深入学习(2)——InnoDB存储引擎

拈花ヽ惹草 提交于 2020-01-25 18:03:43
1. InnoDB存储引擎体系架构 innoDB的存储引擎主要体系结构如上图所示 首先是工作线程:默认7个后台线程,分别是4个io thread(insert buffer、log、read、write),1个master thread(优先级最高),1个锁(lock)监控线程,1个错误监控线程。可以通过show engine innodb status来查看。新版本已对默认的read thread和write thread分别增大到4个,可通过show variables like 'innodb_io_thread%'查看。 每个线程操作的同一个块大内存池:该内存池中会被分为多个区域,分别是缓冲池(buffer pool)、重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool)。内存池所负责也就是维护线程需要访问的数据结构、缓存磁盘文件的数据,方便快速读取,同时在对磁盘文件的数据修改之前在这里缓存,以及重做日志缓存等。具体配置可由 show variables like 'innodb_buffer_pool_size' 、 show variables like 'innodb_log_buffer_size' 、 show variables like 'innodb_additional_mem_pool_size

FFmpeg数据结构:AVPacket解析

左心房为你撑大大i 提交于 2020-01-25 00:53:53
本文主要从以下几个方面对 AVPacket 做解析: AVPacket在FFmpeg中的作用 字段说明 AVPacket中的内存管理 AVPacket相关函数的说明 结合AVPacket队列说明下AVPacket在传递过程中数据缓存的管理 查了一些资料,发现FFmpeg的版本更新还是挺快,而且有很多API也有改动,本文使用的FFmpeg的最新版本 3.1 。 AVPacket简介 AVPacket 是FFmpeg中很重要的一个数据结构,它保存了解复用之后,解码之前的数据(仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts)、解码时间戳(dts)、数据时长,所在媒体流的索引等。 对于视频(Video)来说,AVPacket通常包含一个压缩的Frame,而音频(Audio)则有可能包含多个压缩的Frame。并且,一个Packet有可能是空的,不包含任何压缩数据,只含有side data(side data,容器提供的关于Packet的一些附加信息。例如,在编码结束的时候更新一些流的参数)。 AVPacket的大小是公共的ABI(public ABI)一部分,这样的结构体在FFmpeg很少,由此也可见AVPacket的重要性。它可以被分配在栈空间上(可以使用语句 AVPacket packet; 在栈空间定义一个Packet ),并且除非libavcodec 和

数据结构(三)线性表的顺序存储结构

↘锁芯ラ 提交于 2020-01-24 19:03:35
  一、线性表的定义:线性表就是零个或多个数据元素的有效序列。   二、线性表的顺序存储结构   1.定义:指的是用一段地址连续地存储单元依次存储线性表的数据元素。   2.顺序存储方式:线性表的每个数据元素的类型都相同,所以可以用一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。线性表中,估算最大存储容量就是数组的长度。   3.描述顺序存储结构需要三个属性: 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。 线性表的最大存储容量:数组长度MaxSize。 线性表的当前长度:length。   4.数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的。而线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。   5.地址计算方法:由于数据是从0开始第一个下标的,因此线性表的第i个元素是要存储在数据下标为i - 1 的位置。存储器中每个存储单元都有自己的编号,这个编号称为地址。   6.线性表顺序存储结构的优缺点: 优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间;可以快速地存取表中任意位置的元素。 缺点:插入和删除操作需要移动大量元素;当线性表长度变化较大时,难以确定存储空间的容量;造成存储空间的“碎片”。(实际存储空间小于分配的空间