blog


  • Home

  • Categories

  • Archives

  • Tags

  • Search

runtime 中的环境变量

Posted on 2019-02-27 | In Golang

runtime 中的环境变量

The following environment variables ($name or %name%, depending on the host operating system) control the run-time behavior of Go programs. The meanings and use may change from release to release.

GOGC

The GOGC variable sets the initial garbage collection target percentage. A collection is triggered when the ratio of freshly allocated data to live data remaining after the previous collection reaches this percentage. The default is GOGC=100. Setting GOGC=off disables the garbage collector entirely. The runtime/debug package’s SetGCPercent function allows changing this percentage at run time.

GODEBUG

只要在程序执行之前加上环境变量GODEBUG gctrace =1 ,如: GODEBUG=gctrace=1 ./binary or GODEBUG=gctrace=1 go run main.go or GODEBUG gctrace =1 ./binary > trace.log

程序将会显示gc信息,如下

1
2
3
4
gc 6 @4.741s 0%: 0.008+35+0.17 ms clock, 0.035+0.19/35/100+0.70 ms cpu, 76->76->75 MB, 78 MB goal, 4 P
gc 7 @6.688s 0%: 0.020+117+0.34 ms clock, 0.082+11/117/330+1.3 ms cpu, 147->148->146 MB, 151 MB goal, 4 P
gc 8 @68.645s 0%: 0.019+146+0.30 ms clock, 0.078+0.006/146/407+1.2 ms cpu, 285->285->248 MB, 292 MB goal, 4 P
scvg0: inuse: 426, idle: 0, sys: 427, released: 0, consumed: 427 (MB)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
gctrace: setting gctrace=1 causes the garbage collector to emit a single line to standard
error at each collection, summarizing the amount of memory collected and the
length of the pause. The format of this line is subject to change.
Currently, it is:
	gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P
where the fields are as follows:
	gc #        the GC number, incremented at each GC
	@#s         time in seconds since program start
	#%          percentage of time spent in GC since program start
	#+...+#     wall-clock/CPU times for the phases of the GC
	#->#-># MB  heap size at GC start, at GC end, and live heap
	# MB goal   goal heap size
	# P         number of processors used
The phases are stop-the-world (STW) sweep termination, concurrent
mark and scan, and STW mark termination. The CPU times
for mark/scan are broken down in to assist time (GC performed in
line with allocation), background GC time, and idle GC time.
If the line ends with "(forced)", this GC was forced by a
runtime.GC() call.

Setting gctrace to any value > 0 also causes the garbage collector
to emit a summary when memory is released back to the system.
This process of returning memory to the system is called scavenging.
The format of this summary is subject to change.
Currently it is:
	scvg#: # MB released  printed only if non-zero
	scvg#: inuse: # idle: # sys: # released: # consumed: # (MB)
where the fields are as follows:
	scvg#        the scavenge cycle number, incremented at each scavenge
	inuse: #     MB used or partially used spans
	idle: #      MB spans pending scavenging
	sys: #       MB mapped from the system
	released: #  MB released to the system
	consumed: #  MB allocated from the system
```text

**举例说明:**
```text
垃圾回收信息
gc 1 @2.104s 0%: 0.018+1.3+0.076 ms clock, 0.054+0.35/1.0/3.0+0.23 ms cpu, 4->4->3 MB, 5 MB goal, 4 P。

1 表示第一次执行
@2.104s 表示程序执行的总时间
0% 垃圾回收时间占用的百分比,(不知道和谁比?难道是和上面的程序执行总时间,这样比较感觉没意义)
0.018+1.3+0.076 ms clock 垃圾回收的时间,分别为STW(stop-the-world)清扫的时间, 并发标记和扫描的时间,STW标记的时间
0.054+0.35/1.0/3.0+0.23 ms cpu 垃圾回收占用cpu时间
4->4->3 MB 堆的大小,gc后堆的大小,存活堆的大小
5 MB goal 整体堆的大小
4 P 使用的处理器数量

系统内存回收信息
scvg0: inuse: 426, idle: 0, sys: 427, released: 0, consumed: 427 (MB)

426 使用多少M内存
0 剩下要清除的内存
427 系统映射的内存
0 释放的系统内存
427 申请的系统内存
Read more »

视频基础

Posted on 2019-01-19 | In Video

视频基础

概念

采样率:了每秒从连续信号中提取并组成离散信号的次数。

例如,音频属于波,属模拟信号,采样是把它变成离散的量,如果波相当于曲线,采样就相当于用N个点来描述这个曲线。点越多(间隔是相同的),线就越平滑,越接近于最初的曲线。

帧率:是用于测量显示帧数的量度。测量单位为“每秒显示帧数”(Frame per Second,FPS)或“赫兹”,一般来说FPS用于描述影片、电子绘图或游戏每秒播放多少帧。

分辨率:泛指量测或显示系统对细节的分辨能力。此概念可以用时间、空间等领域的量测。

分辨率的种类有: 频谱分辨率、视频分辨率、光学分辨率、显示分辨率、数字相机分辨率等。通常,“分辨率”被表示成每一个方向上的像素数量,比如640x480等。而在某些情况下,它也可以同时表示成“每英寸像素”(pixels per inch,ppi)以及图形的宽度和高度。比如72ppi,和8x6英寸。

视频文件大小的计算

视频文件体积:(音频码率+视频码率) x 时长 / 8

如果一个视频的视频码率为3Mbps, 音频码率为512Kbps, 时长90分钟(5400秒), 那么整个视频文件的大小就是:

(512/1024 + 3) x 5400 / 8 = 2362MB

视频压缩

引⼊下⾯三个概念来介绍视频压缩知识。分别是:视频⽂件格式(简称:⽂件格式),视频 封装格式(简称:视频格式),视频编码⽅式(简称:视频编码)

视频⽂件格式(简称:⽂件格式)

我们知道Windows系统中的⽂件名都有后缀,例如1.doc,2.wps,3.psd等等。Windows设置后缀名的⽬的是让系统中的应⽤程序来识别并关联这些⽂件,让相应的⽂件由相应的应⽤程序打开。例如你双击1.doc⽂件,它会知道让Microsoft Office去打开,⽽不会⽤Photoshop去打开这个⽂件。所以常⻅的视频⽂件格式如1.avi,2.mpg这些都叫做视频的⽂件格式,它由你电脑上安装的视频播放器关联。你可以随意改扩展名,但是真的对视频⼀点影响都没有,千万不要以为 avi 改成 mp4,视频就变成 mp4 格式了。

视频封装格式(简称:视频格式)

AVI,MPEG,VOB是⼀种视频封装格式,相当于⼀种储存视频信息的容器。它是由相应的公司开发出来的。我们可以在⾃⼰的电脑上看到的1.avi,2.mpg,3.vob这些视频⽂件格式的后缀名即采⽤相应的视频封装格式的名称。以下集中介绍⼏种封装格式:

AVI格式(后缀为.AVI)

它的英⽂全称为Audio Video Interleaved,即⾳频视频交错格式。它于1992年被Microsoft公司推出。这种视频格式的优点是图像质量好。由于⽆损AVI可以保存alpha通道,经常被我们使⽤。缺点太多,体积过于庞⼤,⽽且更加糟糕的是压缩标准不统⼀,最普遍的现象就是⾼版本Windows媒体播放器播放不了采⽤早期编码编辑的AVI格式视频,⽽低版本Windows媒体播放器⼜播放不了采⽤最新编码编辑的AVI格式视频,所以我们在进⾏⼀些AVI格式的视频播放时常会出现由于视频编码问题⽽造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声⾳没有图像等⼀些莫名其妙的问题。

DV-AVI格式(后缀为.AVI)

DV的英⽂全称是Digital Video Format,是由索尼、松下、JVC等多家⼚商联合提出的⼀种家⽤数字视频格式。数字摄像机就是使⽤这种格式记录视频数据的。它可以通过电脑的IEEE 1394端⼝传输视频数据到电脑,也可以将电脑中编辑好的的视频数据回录到数码摄像机中。这种视频格式的⽂件扩展名也是avi。电视台采⽤录像带记录模拟信号,通过EDIUS由IEEE 1394端⼝采集卡从录像带中采集出来的视频就是这种格式。

QuickTime File Format格式(后缀为.MOV)

美国Apple公司开发的⼀种视频格式,默认的播放器是苹果的QuickTime。具有较⾼的压缩⽐率和较完美的视频清晰度等特点,并可以保存alpha通道。⼤家可能注意到了,每次安装EDIUS,我们都要安装苹果公司推出的QuickTime。安装其⽬的就是为了⽀持JPG格式图像和MOV视频格式导⼊。

MPEG格式(文件后缀可以是 .MPG .MPEG .MPE .DAT .VOB .ASF .3GP .MP4等)

它的英文全称为Moving Picture Experts Group,即运动图像专家组格式,该专家组建于1988年,专门负责为CD建立视频和音频标准,而成员都是为视频、音频及系统领域的技术专家。

MPEG文件格式是运动图像压缩算法的国际标准。MPEG格式目前有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4。MPEG-1、MPEG-2目前已经使用较少,着重介绍MPEG-4,其制定于1998年,MPEG-4是为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。目前MPEG-4最有吸引力的地方在于它能够保存接近于DVD画质的小体积视频文件。你可能一定注意到了,怎么没有MPEG-3编码,因为这个项目原本目标是为高分辨率电视(HDTV)设计,随后发现MPEG-2已足够HDTV应用,故MPEG-3的研发便中止(百度百科说MPEG-3就是mp3,我认为这个说法并不准确。)。

Real Video格式(后缀为.RM .RMVB)

Real Networks公司所制定的音频视频压缩规范称为Real Media。

用户可以使用RealPlayer根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。RMVB格式:这是一种由RM视频格式升级延伸出的新视频格式,当然性能上有很大的提升。RMVB视频也是有着较明显的优势,一部大小为700MB左右的DVD影片,如果将其转录成同样品质的RMVB格式,其个头最多也就400MB左右。大家可能注意到了,以前在网络上下载电影和视频的时候,经常接触到RMVB格式,但是随着时代的发展这种格式被越来越多的更优秀的格式替代,著名的人人影视字幕组在2013年已经宣布不再压制RMVB格式视频。

Flash Video格式(后缀为.FLV)

由Adobe Flash延伸出来的的一种流行网络视频封装格式。随着视频网站的丰富,这个格式已经非常普及。

视频编码方式(简称:视频编码)

所谓视频编码方式就是指能够对数字视频进行压缩或者解压缩(视频解码)的程序或者设备。通常这种压缩属于有损数据压缩。也可以指通过过特定的压缩技术,将某个视频格式转换成另一种视频格式。

H.26X系列

由ITU[国际电传视讯联盟]主导,包括H.261、H.262、H.263、H.264、H.265。

  • H.261:主要在老的视频会议和视频电话产品中使用。

  • H.263:主要用在视频会议、视频电话和网络视频上。

  • H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。

  • H.265:高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,H.264/MPEG-4 AVC的继任者。HEVC被认为不仅提升图像质量,同时也能达到H.264/MPEG-4 AVC两倍之压缩率(等同于同样画面质量下比特率减少了50%),可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势。直至2013年,Potplayer添加了对于H.265视频的解码,尚未有大众化编码软件出现。

MPEG系列

由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发 ,视频编码方面主要有:

  • MPEG-1第二部分(MPEG-1第二部分主要使用在VCD上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的VHS录像带相当。)

  • MPEG-2第二部分(MPEG-2第二部分等同于H.262,使用在DVD、SVCD和大多数数字视频广播系统和有线分布系统(cable distribution systems)中。)

  • MPEG-4第二部分(MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263,它的压缩性能有所提高。)

  • MPEG-4第十部分(MPEG-4第十部分技术上和ITU-T H.264是相同的标准,有时候也被叫做“AVC”)最后这两个编码组织合作,诞生了H.264/AVC标准。ITU-T给这个标准命名为H.264,而ISO/IEC称它为MPEG-4 高级视频编码(Advanced Video Coding,AVC)。

总之,即使是同一种视频文件格式,如*.MPG。又分为MPEG-1,MPEG-2 ,MPEG-4几种不同的视频封装格式,就算是同一种视频封装格式,如MPEG-4又可以使用多种视频编码方式。视频的编码形式才是一个视频文件的本质所在,不要简单的通过文件格式和封装形式来区分视频。

Read more »

CMake

Posted on 2019-01-18 | In Tools

CMake

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

Read more »

局域网

Posted on 2019-01-16 | In Network

局域网

子网与子网掩码

网络上,数据从一个地方传到另外一个地方,是依靠 IP 寻址。从逻辑上来讲,是两步的。

第一步,从 IP 中找到所属的网络,好比是去找这个人是哪个小区的;

第二步,再从 IP 中找到主机在这个网络中的位置,好比是在小区里面找到这个人。

第一步中的网络,就称之为「子网」(Subnet)。从逻辑上来讲,一般同一子网(Subnet)是使用相同的网关。就好比,一个小区的入口。

Read more »

Make

Posted on 2019-01-15 | In Tools

Make

configure, make 和 make install 的区别

  • ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
  • make是用来编译的,它从Makefile中读取指令,然后编译。
  • make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
Read more »

cobra

Posted on 2019-01-14 | In Golang

Overview

Cobra is a library providing a simple interface to create powerful modern CLI interfaces similar to git & go tools.

Cobra is also an application that will generate your application scaffolding to rapidly develop a Cobra-based application.

Read more »

RTMP

Posted on 2019-01-14 | In Network

RTMP 块流

握手

一个 RTMP 连接以握手开始。RTMP 的握手不同于其他协议;RTMP 握手由三个固定长度的块组成,而不是像其他协议一样的带有报头的可变长度的块。客户端 (发起连接请求的终端) 和服务器端各自发送相同的三块。便于演示,当发送自客户端时这些块被指定为 C0、C1 和 C2;当发送自服务器端时这些块分别被指定为 S0、S1 和 S2。

Read more »

Node.js

Posted on 2019-01-10 | In Tools

Node.js

Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。 V8引擎执行Javascript的速度非常快,性能非常好。Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

Read more »

常用命令

Posted on 2019-01-09 | In linux

Linux 服务管理两种方式service和systemctl

1.service命令 service命令其实是去/etc/init.d目录下,去执行相关程序

1
2
3
4
5
6
7
# service命令启动redis脚本
service redis start
# 直接启动redis脚本
/etc/init.d/redis start
# 开机自启动
update-rc.d redis defaults
其中脚本需要我们自己编写
Read more »

SSH

Posted on 2019-01-08 | In Tools

SSH

概念与原理

SSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务。SSH的具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。

Read more »
1 2 3
C

C

Elegant theme for Jekyll.

26 posts
7 categories
25 tags
© 2019 C
Powered by Jekyll
Theme - NexT.Muse