- 博客(147)
- 资源 (17)
- 收藏
- 关注
原创 panic & recover
开场白 深入理解 Go panic and recover 谈谈 panic 和 recover 的原理 注:上面的链接的文章非常棒,需要大家看完链接文章后,才能往下看 第一个例子 假如你看明白了上述的文章,那我举两个例子: packagemain import( "fmt" ) funcmain(){ fmt.Println("ok1"...
2019-06-03 10:26:19
365
原创 openresty 总结
本文不是要介绍如何使用openresty,这类文章太多,大家可以随手找到,今天我想一步一步引入大家去深究openresty的实现过程。这样对大家的使用会更加深刻。 首先openresty是基于nginx+lua的,大家有没有去想过nginx和lua是如何结合的?也就是nginx为什么会执行lua代码?这也是我想第一给大家介绍的内容,nginx是c写的web服务,所以nginx...
2018-12-08 20:29:34
943
原创 golang问题总结
//author: ysqi ,https://yushuangqi.com package main import ( "fmt" ) func sliceModify(slice []int) { // slice[0] = 88 slice[0] = 1000 slice = append(slice, 6) } func modify(array []int) { ar...
2018-04-23 15:21:17
732
转载 Linux c 开发 - Autotools使用详细解读
转自:http://blog.csdn.net/initphp/article/details/43705765 关于Autotools 我们前面的章节中已经讲到了Makefile的使用(点击进入查看文章)。我们知道在Linux下面如果编译一个比较大型的项目,我们可以通过Makefile的方式来完成。 但是,我们又蛋疼了,Makefile拥有复杂的语法结构,甚至让
2017-10-11 10:16:22
515
转载 Linux c 开发 - Makefile工具
转自:http://blog.csdn.net/initphp/article/details/7692923 Makefile是一个c语言的编译工具。如果学过Java,可能会认识Maven工具,makefile也是类似的工作。 Makefile能帮助c语言建立自动化的编译。一旦写好,执行一个make命令就可以编译整个工程。当然编写Makefile文件的时候有很多知识点在里
2017-10-11 10:14:38
437
原创 fastdfs总结
1 storage启动后会进行全量同步,由traceker分配src_id, 当指定的src_id通过心跳发现需要同步后开启线程全量同步 2 storage启动后会针对storage开启n个数量的线程进行同步,采用push的方式,由源发起向目的推送 3 从头到尾storage的一切信息都是通过tracker获取
2017-07-18 15:15:38
632
转载 InfluxDB详解之TSM存储引擎解析(二)
InfluxDB详解之TSM存储引擎解析(二) 上一篇文章主要介绍了 TSM 存储引擎一些相关的概念、组件以及数据存储的目录结构,文件组成结构等内容。这一篇将会尽量从 InfluxDB 源码的角度,深入讲解数据插入、查询、合并等操作的具体流程以及内部数据结构的设计。 上一篇文章传送门: 『InfluxDB详解之TSM存储引擎解析(一)』。 主要数据结构 InfluxDB
2017-07-13 15:08:22
2515
原创 influxdb总结
上一篇转载的文章非常经典,接下来补充几点cmd.Run -> s.Open() -> s.TSDBStore.Open() -> loadShards -> (s *Shard) Open() //遍历data目录,把所有的db文件遍历出来 for _, db := range dbDirs { //遍历策略文件夹 for _, rp := range rpDirs { //遍历share
2017-07-13 14:01:51
917
转载 Influxdb原理详解
Influxdb原理详解 本文目录 [隐藏] 1一、InfluxDB特点 2二、InfluxDB概念 2.11)数据格式 Line Protocol 2.22)Point 2.33)Series 2.44)Shard 3三、存储引擎 - TSM Tree 3.11)Shard 3.22)Cache 3.33)WAL 3.
2017-07-12 09:52:07
4244
原创 php异常机制
最近在扩展抓取pdo的时候发现了点问题,发现有的是报异常,有的是不报, 11 <?php 10 error_reporting(E_ALL ^ E_DEPRECATED); 9 /* 8 //$link = mysql_connect('10.209.44.14:10044', 'ffan_weixin_bj', 'ffan_weixin_bj'); 7 $link = mysq
2017-03-10 22:13:49
1075
转载 linux动态链接库导出函数控制
linux动态链接库导出函数控制 windows 环境的vc的话,可以方便的指定__declspec(dllexport) 关键字来控制是否把dll中的函数导出。 我也来测试一下linux下面是如何做的: 先看gcc 和ld的相关选项 ====================================== gcc 选项 -shared P
2017-03-05 15:33:35
2408
转载 SSL/TLS原理详解
本文大部分整理自网络,相关文章请见文后参考。 关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 ,如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自建CA和颁发SSL证书 。 SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰。正文开始。 1. SSL/TLS概
2017-03-02 09:09:35
684
转载 go http分析
go标准库剖析1 (transport http请求的承载者) 时间 2015-09-11 14:40:39 SegmentFault 原文 http://segmentfault.com/a/1190000003735562 主题 HTTP Goroutine 使用golang net/http库发送http请求, 最后都是调用 transport的 RoundT
2017-02-21 18:25:20
3852
转载 深入Go语言网络库的基础实现
Go语言的出现,让我见到了一门语言把网络编程这件事情给做“正确”了,当然,除了Go语言以外,还有很多语言也把这件事情做”正确”了。我一直坚持着这样的理念——要做"正确"的事情,而不是"高性能"的事情;很多时候,我们在做系统设计、技术选型的时候,都被“高性能”这三个字给绑架了,当然不是说性能不重要,你懂的。目前很多高性能的基础网络服务器都是采用的C语言开发的,比如:Nginx、Redis、memca...
2016-12-10 23:37:56
4482
转载 深入研究PHP及Zend Engine的线程安全模型
在阅读PHP源码和学习PHP扩展开发的过程中,我接触到大量含有“TSRM”字眼的宏。通过查阅资料,知道这些宏与Zend的线程安全机制有关,而绝大多数资料中都建议按照既定规则使用这些宏就可以,而没有说明这些宏的具体作用。不知道怎么回事总是令人不舒服的,因此我通过阅读源码和查阅有限的资料简要了解一下相关机制,本文是我对研究内容的总结。 本文首先解释了线程安全的概念及PHP中线程安全的背景,然后详
2016-11-13 13:53:12
642
转载 动态连接库和符号(symbol)
strip符号表 对于.so库,strip过后仍然可以被链接。因为用于链接的.dynsym节仍在。 对于.o文件,strip过后确实不能在连接编译成目标文件。因为.o文件不是目标文件,和.so文件不同,它并没有.dynsym节用于导出符号给外部程序。所以我认为编译器用于链接成目标文件的符号表就是我们objdump出来看到的那张
2016-10-31 10:42:13
4236
1
原创 php5.6与php7 不同总结(陆续补充)
php5.6的哈希表比较恶心,php7也对哈希表进行了改造,先介绍下php5.6的哈希表 原来大家都清楚,我们看一下更细的一部分,如何更新插入: static zend_never_inline zval **_get_zval_cv_lookup_BP_VAR_W(zval ***ptr, zend_uint var TSRMLS_DC) { zend_compiled_variable
2016-09-08 16:45:14
8765
转载 抽象语法树
转自:http://blog.chinaunix.net/uid-26750235-id-3139100.html (一)简介 抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形
2016-09-01 11:18:10
18733
1
转载 深入理解PHP7之zval
深入理解PHP7之zval 转自:https://github.com/laruence/php7-internal/blob/master/zval.md PHP7已经发布, 如承诺, 我也要开始这个系列的文章的编写, 今天我想先和大家聊聊zval的变化. 在讲zval变化的之前我们先来看看zval在PHP5下面是什么样子 版权申明: 本文是原创作品,包括文字、资料、
2016-08-23 18:20:34
951
转载 PHP 7中新的Hashtable实现和性能改进
PHP 7中新的Hashtable实现和性能改进 转自:http://gywbd.github.io/ 这篇文章是翻译自nikic的最新大作,我从他的blog中学到了很多东西。这篇文章貌似是他半年多来发的第一篇文章,文章主要是讲PHP 7中的新的Hashtable的实现,Hashtable是PHP中非常核心的部分,数组就是基于此实现的,而数组在PHP中的使用是如此之频繁,所以
2016-08-23 17:26:36
6410
1
原创 php的op_array与execute_data的关系
今天稍微对php做下总结,首先介绍最重要的两个数据结构,以及两个结构间的数据传递 struct _zend_op_array { /* Common elements */ zend_uchar type; const char *function_name; zend_class_entry *scope; zend_uint fn_flags; union _zend_funct
2016-08-07 01:11:49
2946
转载 深入理解PHP传参原理(PHP5.2)
这篇文章不错,虽然是5.2,后续会根据这篇文章把5.6和7整理出来 首先说下今天想到的一个问题。在编写php扩展的时候,似乎参数(即传给zend_parse_parameters的变量)是不需要free的。举例: PHP_FUNCTION(test) { char* str; int str_len; if (zend_parse_pa
2016-07-26 10:11:31
1331
原创 c与lua 相互调用
改了下c代码与lua的联调,利用网上的例子 gcc -g lua.c -llua -lm -o luatest #include <stdio.h> #include <string.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" typedef int bool; void main(in...
2016-07-11 01:53:41
477
转载 [译]深入浅出Redux中间件
[译]深入浅出Redux中间件 时间 2015-10-09 09:37:12 Kazaff 原文 http://blog.kazaff.me/2015/10/09/[译]Redux中间件深入浅出/ 主题 中间件 Redux 原文地址: https://medium.com/@meagle/understanding-87566abcfb7a 从2014年二月开
2016-05-03 09:54:00
810
转载 gdb 调试汇编
关于GDB调试C程序的常用命令与手段就不多说了,这里主要介绍一下如何对C程序做到汇编指令级别的调试。 首先是获取汇编代码,这可以通过disassemble命令或x命令或类似的命令: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
2016-03-31 19:37:55
1967
转载 PHP-Zend引擎剖析之CV变量
讨论完虚拟机的基本流程后,接下来就是把细节的地方揪干净,接下来几篇文章先揪一下PHP的变量。我们知道PHP的变量是弱类型的,但是我并不打算从这个开始分析,我先把最简单的赋值语句:开始分析整个变量赋值的过程,同时解释一下PHP的CV(compiled variable)变量。 从上一篇《PHP-Zend引擎剖析之Hello World(二)》知道每条语法规则从编译到运行需要经历以下两个步骤
2016-03-10 11:01:01
1072
转载 败者树 多路归并排序
一 外部排序的基本思路 假设有一个72KB的文件,其中存储了18K个整数,磁盘中物理块的大小为4KB,将文件分成18组,每组刚好4KB。 首先通过18次内部排序,把18组数据排好序,得到初始的18个归并段R1~R18,每个归并段有1024个整数。 然后对这18个归并段使用4路平衡归并排序: 第1次归并:产生5个归并段 R11 R12 R13 R14
2016-02-23 11:35:17
3617
转载 Hadoop是怎么分块的
Hadoop是怎么分块的 hadoop的分块有两部分,其中第一部分更为人熟知一点。 第一部分就是数据的划分(即把File划分成Block),这个是物理上真真实实的进行了划分,数据文件上传到HDFS里的时候,需要划分成一块一块,每块的大小由hadoop-default.xml里配置选项进行划分。 dfs.block.size 67108864 The
2016-02-17 20:24:34
2432
转载 Backlog 讨论
TCP3次握手 实际上可分为4步 1 客户端发起connect(),发送SYN j 2 服务器从SYN queue中建立条目,响应SYN k, ACK J+1 3 客户端connect()成功返回,响应ACK K+1 4 服务器将socket从SYN queue移入accept queue,accept()成功返回 注:SYN/FIN各占一个序列号,ACK
2015-11-25 18:22:22
3387
原创 linux 高端内存
最近又温习了一下linux内存分配,自己逻辑地址与物理地址的映射,特别针对高端内存的理解 首先说32bit 和64 bit针对空间的划分 1 32bit 虚拟空间划分内核空间1g和用户空间4g(其实可以调整变成内核空间2g和用户空间2g) 这点要注意的是虚拟的概念和物理内存无关,只是操作系统便于管理的一种抽象,我以前总是和物理内存去做对比的理解,最后纠缠不清,精神崩溃了 2 32b
2015-08-12 10:55:16
622
转载 物理内存布局
通过 cat /proc/zoneinfo 可以看到zone区域 32bit架构 可以配置两种不同的划分 1G(内核空间)/3G(用户空间) ZONE_DMA 内存开始的16MBZONE_NORMAL 16MB~896MBZONE_HIGHMEM 896MB ~ 结束 DMA&NORMAL是直接映射到3G~3G+896M,其余部分(如0~3G的用户空间,内核空间
2015-08-11 14:40:45
1800
转载 linux 高速缓冲区 buffer cache
/* * linux/fs/buffer.c * * (C) 1991 Linus Torvalds */ /* * 'buffer.c' implements the buffer-cache functions. Race-conditions have * been avoided by NEVER letting a interrupt change a buffer (ex
2015-08-06 22:46:37
1008
转载 使用netns虚拟网络进行网络测试
netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,目前netns在lxc容器中被用来为容器提供网络。 使用netns创建的网络空间独立于当前系统的网络空间,其中的网络设备以及iptables规则等都是独立的,就好像进入了另外一个网络一样。 netns虚拟网络空间的网络通信依赖于物理接口,光讲听上去很虚,我们来操练点实际的看看: 1
2015-07-23 23:42:08
947
转载 Docker背后的内核知识—Namespace资源隔离
Docker这么火,喜欢技术的朋友可能也会想,如果要自己实现一个资源隔离的容器,应该从哪些方面下手呢?也许你第一反应可能就是chroot命令,这条命令给用户最直观的感觉就是使用后根目录/的挂载点切换了,即文件系统被隔离了。然后,为了在分布式的环境下进行通信和定位,容器必然需要一个独立的IP、端口、路由等等,自然就想到了网络的隔离。同时,你的容器还需要一个独立的主机名以便在网络中标识自己。想到网络,
2015-07-23 16:00:20
2237
转载 Docker基础技术:Linux Namespace(上)
时下最热的技术莫过于Docker了,很多人都觉得Docker是个新技术,其实不然,Docker除了其编程语言用go比较新外,其实它还真不是个新东西,也就是个新瓶装旧酒的东西,所谓的The New “Old Stuff”。Docker和Docker衍生的东西用到了很多很酷的技术,我会用几篇 文章来把这些技术给大家做个介绍,希望通过这些文章大家可以自己打造一个山寨版的docker。 当然,文章的
2015-07-23 14:13:28
587
转载 Linux内核namespace机制
1. Linux内核namespace机制 Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的
2015-07-23 09:07:00
606
转载 1消息队列(报文队列)实践到内核消息队列的创建
我是无名小卒,一直想写一些关于内核方面的资料,学习内核很久了,市面上的内核书我都读过了,无法对任何一本书加以总结,因为他就象linux的内核一样在不断更新和升级,针对2.6内核现在市面上非常缺少相关内核的分析资料情况,当然,也有不少网友写了一些关于2.6内核的博客文章,我也看过,但是写的不够深刻具体,总是在内核的过程上粗略的一笔带过,因此我下决心只要有空闲时间就写一些日志来与大家分享,很多书籍和博
2015-07-22 22:02:24
631
原创 gdb 调试go
(gdb) source /usr/local/go/src/pkg/runtime/runtime-gdb.pyLoading Go Runtime support.(gdb) r -f etc/test.conf(gdb) info goroutines 1 waiting runtime.park* 2 syscall runtime.notetsleepg 3 waiting runtim
2015-06-02 18:00:39
1214
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅