block

Hdfs

给你一囗甜甜゛ 提交于 2020-02-08 18:49:13
1介绍 设计思想是分而治之,将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。 在大数据系统中的应用是为各类分布式运算框架提供数据存储服务。 2.特性 hdfs中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本是64M. hdfs文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/file.data 目录结构及文件分块位置信息(元数据)的管理由namenode节点承担,namenode是hdfs集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id及所在的datanode服务器) 文件的各个block的存储管理由datanode节点承担,datanode是hdfs集群从节点,每一个block都可以在多个datanode上存储多个副本,副本数量也可以通过参数设置dfs.replication,默认是3. hdfs是设计成适应一次写入,多次读出的场景,且不支持文件的修改,适合用来做数据分析,并不适合用来做网盘应用,因为不便修改,延迟大,网络开销大,成本太高。 3.shell命令行客户端操作

linux ext2文件系统

本小妞迷上赌 提交于 2020-02-08 01:36:59
  如果把一个磁盘看做一个军队,这支军队总司令就是Boot sector ,总司令不能一个一个兵直接指挥吧,这时候我们就需要把所有其他士兵分成各个军(Block group),每一个军队内部我们把它分成干部(inode)与工兵(Block),军队要搞清各自的兵源情况吧,这就需要文件系统描述(File system description)用来告诉我们属于这个军的兵是从编号多少到多少,以及这个军队内部各个部分人员的分布情况,inode table就是这个军队内所有干部的集合,与之对应的Data block 就是所有工兵的集合,每一个inode都要知道自己管着多少工兵。 文件就是我们这个军队的敌人,每一个文件上来就会消灭我们一个干部(inode)以及无数的工兵(Data block),这时候我们就要知道当前的士兵减员情况,这就引出了inode bitmap(干部存活情况)Block bitmap (工兵存活情况),方便我们快速定位活着的士兵,准备下一次打仗,好了打仗打完了我们要对外公布自己的减员情况这就需要super block来告诉总司令我们这个军的减员情况。 通过上面这个例子希望大家能更好的理解下面文件系统的各个成分。 Ext2文件系统使用以inode为基础的文件系统。   文件系统一开始将inode与block规划好了,除非重新格式化,否则inode与block固定后就不再变动

进程的队列

自闭症网瘾萝莉.ら 提交于 2020-02-07 06:49:05
from multiprocessing import Process,Queue #和JoinableQueue类似,但是JoinableQueue多了task_list 和join两个方法 qq = Queue(3) qq.put('first',block=False,timeout=7) qq.put('second',block=False,timeout=7) qq.put('third',block=False,timeout=7) # # qq.put('second',block=True) # # qq.put('thirt',block=True) # # qq.put('forte',block=False) # # qq.put_nowait('second') # # qq.put_nowait('third') # # qq.put_nowait('forth') #block = True ====>默认的参数,超过范围不报错,会卡主,当为False则卡主,报错,timeout为卡主的时间 # # print(qq.get()) #拿出来 # print(type(qq)) # for i in range(1,4): # print(i,qq.get()) print(qq.get()) print(qq.get()) print(qq.get()

iOS 面试全方位剖析 -- Block篇

余生长醉 提交于 2020-02-06 01:52:54
1.Block的本意 block本质上也是一个OC对象,它内部也有个isa指针, block是封装了函数调用以及函数调用环境的OC对象, block是封装函数及其上下文的OC对象 2.block截获变量 #import "SYDBlcok.h" // 全局变量----不截获全局变量 int global_var = 4; // 静态全局变量-----不截获全局静态变量 static int static_global_var = 5; @implementation SYDBlcok -(void)method { // 基本数据类型的局部变量----只截获值 int var = 6; // 对象类型的局部变量----连同所有修饰符一起截获 __unsafe_unretained id unsafe_ibject = nil; __strong id strong_obj = nil; // 局部静态变量---以指针形式截获局部静态变量 static int multiplier_static = 3; NSLog(@"multiplier_static:%d",multiplier_static); int(^Block)(int) = ^(int num) { NSLog(@"局部变量>基本数据类型:%d",var); NSLog(@"局部变量>对象类型%@----strong

IOS之block,一点小心得

寵の児 提交于 2020-02-06 01:48:21
作为一个iOS开发程序员,没用过block是不可能的。这次我探讨的是block原理,但是有些更深层次的东西,我也不是很清楚,以后随着更加了解block将会慢慢完善。   第一个问题,什么是block?   我们都会用block,但是block是什么呢,这是首先要弄清楚的概念。虽然,是什么并不影响我们用它,但是搞清楚原理我们才能更好的去使用它,我觉得作为一个程序员,需要时刻保持对事物原理追究的心态?   block的是本质是对象。但是你也可以说它是代码块、闭包、内联函数、函数指针...还有很多叫法,也可能这里的叫法都是错误的,或是不准确的,但是我个人觉得从功能上讲,可以这么理解。不过为了对oc的尊敬,还是叫它block吧,block就是block。在其他语言中也有类似block的语法,像javascript的闭包,函数里面的函数,java中的代码块,c中的函数指针等。就好像,事先放一段代码在这里,然后需要的时候回过头来调用。我们知道,代码执行是按顺序调用的,也就是我们常说的面向过程。但是block可以反向调用。只不过block可以写在函数里面,也可以说它是函数中的函数,它是比较特殊的函数。我们看下面的一个例子。 int main(int argc, const char * argv[]) { @autoreleasepool { int i = 0; void (^block)()

Block 实现 浅析

偶尔善良 提交于 2020-02-05 23:34:52
前言 这里 有关于 block 的 5 道测试题,建议你阅读本文之前先做一下测试。 先介绍一下什么是闭包。在 wikipedia 上, 闭包的定义 ) 是: In programming languages, a closure is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local variables (also called free variables or upvalues) of that function. 翻译过来,闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。 block 实际上就是 Objective-C 语言对于闭包的实现。 block 配合上 dispatch_queue,可以方便地实现简单的多线程编程和异步编程,关于这个,我之前写过一篇文章介绍: 《使用 GCD》 。 本文主要介绍 Objective-C 语言的 block 在编译器中的实现方式。主要包括: block 的内部实现数据结构介绍 block 的三种类型及其相关的内存管理方式 block 如何通过 capture

深入理解Block

丶灬走出姿态 提交于 2020-02-05 23:25:13
Block 简介 Mac OS X系统10.4及其iOS 4.0后引入了闭包的概念,这项语言特性是作为扩展而加入GCC编译器的。在Foundation框架中大量使用了Block。 块就是一个实现某个功能的函数闭包,这个函数闭包可以带有参数,也可以没有参数,可以有返回值也可以没有返回值者,用符号’^’来表示。块在声明的范围内,可以调用块外部的全局变量和局部变量。 void (^someBlock) () = ^{ //A simple block //Implementation: some code //无返回值,无参数 } void (^block) (int a, bool b) = ^(int a, bool b) { //some code //无返回值,带参数 } int (^block2) (int a, bool b) = ^(int a, bool b) { //some code //带参数带返回值 return integerValue; } 需要主意的是,block内部不能改变外部变量,想要在Block中改变变量的值,那么我们只需要在变量声明的时候加上__Block修饰符。 __block int a = 0; void (^block)() = ^{ a = 33; }; Block 的内部结构 每个Object-c变量都占据着某个内存区域

iOS Block详细介绍(block实现)

老子叫甜甜 提交于 2020-02-05 23:20:31
Block的实现 数据结构定义 block的数据结构定义如下图 对应的结构体定义如下: struct Block_descriptor { unsigned long int reserved; unsigned long int size; void (*copy)(void *dst, void *src); void (*dispose)(void *); }; struct Block_layout { void *isa; int flags; int reserved; void (*invoke)(void *, ...); struct Block_descriptor *descriptor; /* Imported variables. */ }; 通过改图 我们可以知道 一个block实例实际上由6部分组成。 1.isa指针。所有对象都有该指针,用于实现对象相关的功能。 2.flags 用于按bit位表示一些block的附加信息。本文后面介绍 block copy 的实现代码可以看到对该变量的使用。 3.reserved 保留变量 4.invoke 函数指针 指向具体的block实现的函数调用地址 5.descriptor 表示该block的附加描述信息 主要是size 大小 以及 copy 和 dispose函数的指针 6.variables capture

block基本使用和底层

爱⌒轻易说出口 提交于 2020-02-05 23:19:07
block基础使用语法 一、block与函数的对比 定义函数指针 int (*myFn)(); 定义Blocks int (^MyBlocks)(int,int); 调用函数指针 (*myFn)(10, 20); l调用Blocks MyBlocks(10, 20) 二、Block 语法: 1.作为当地变量: returnType (^blockName)(parameterTypes) = ^returnType(parameters) { ... ... } 2.作为属性: @property (nonatomic,copy) returnType (^blockName)(parameterTypes) 3.作为方法参数: -(void)someMethodThatTakesABlock:( returnType (^)(parameterTypes) )blockName 4.作为方法调用的参数: [someObject someMethodThatTakesABlock:^returnType(parameters){ ... ... } ]; 5.作为typeDef: typedef returnType(^typeName)(parameterTypes) TypeName blockName = ^returnType(parameters) { ... ... }

黑幕背后的__block修饰符

久未见 提交于 2020-02-05 22:44:55
我们知道在Block使用中,Block内部能够读取外部局部变量的值。但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符。 __block另外一个比较多的使用场景是,为了避免某些情况下Block循环引用的问题,我们也可以给相应对象加上__block 修饰符。 为什么不使用__block就不能在Block内部修改外部的局部变量? 我们把以下代码通过 clang -rewrite-objc 源代码文件名重写: 1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 int val = 10; 4 void (^block)(void) = ^{ 5 NSLog(@"%d", val); 6 }; 7 block(); 8 } 9 return 0; 10 } 得到如下代码: 1 struct __main_block_impl_0 { 2 struct __block_impl impl; 3 struct __main_block_desc_0* Desc; 4 int val; 5 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _val, int flags=0) : val(_val) { 6