自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (10)
  • 问答 (1)
  • 收藏
  • 关注

转载 Finalizing a compression format

With Zstandard v1.0 looming ahead, the last major item for zstd to settle is an extended set of features for its frame encapsulation layer.Quick overview of the design : data compressed by zstd is cut

2017-03-24 16:50:48 563 1

原创 webrtc 的回声抵消算法

webrtc 的回声抵消(aec、aecm)算法主要包括以下几个重要模块:回声时延估计;NLMS(归一化最小均方自适应算法);NLP(非线性滤波);CNG(舒适噪声产生)。一般经典aec算法还应包括双端检测(DT)。考虑到webrtc使用的NLMS、NLP和CNG都属于经典算法范畴,故只做简略介绍,本文重点介绍webrtc的回声时延估计算法,这也是webrtc回声抵消算法区别一般算法(如视频会议中的

2017-03-24 16:47:50 1815

原创 webrtc 源码阅读——audioprocessing

webrtc 作为一个流媒体的框架,包含音频、视频、p2p传输一整套流媒体核心技术。最近利用业余时间学习它的音频模块,webrtc支持音频的麦克风采集、编码、RTP打包发送。同时加入了AGC(自动增益)、NS(降噪)、AEC(回声消抑)、VAD(静音检测)等一系列算法。这些算法主要在采集过后,编码之前进行处理,代码集中在audioprocessing module,简称APM。下面是audiopro

2016-12-09 15:07:35 4913

转载 进程 vs. 线程

进程 vs. 线程我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。如果用多线程

2016-04-20 15:45:02 436

原创 Unicode 字符集学习笔记

字符集软件的本地化要解决的真正问题,实际上就是如何来处理不同的字符集。多年来,许多人一直将文本串作为一系列单字节字符来进行编码,并在结尾处放上一个零。对于我们来说,这已经成了习惯。当调用s t r l e n函数时,它在以0结尾的单字节字符数组中返回字符的数目。 问题是,有些文字和书写规则(比如日文中的汉字就是个典型的例子)的字符集中的符号太多了,因此单字节(它提供的符号最多不能超过 2 5 6个

2016-02-17 12:14:49 476

转载 LVS集群的负载调度

本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法。针对请求的服务时间变化很大,给出一个动态反馈负载均衡算法,它结合内核中的加权连接调度算法,根据动态反馈回来的负载信息来调整服务器的权值,来进一步避免服务器间的负载不平衡。1. 前言 在上一篇文章中,我们主要讲述了LVS集群中实现的三种IP负载均衡技术,它们主要解决系统的可伸缩性和透明性问题,如何通过负载调度器

2015-12-11 17:05:17 457

转载 Linux服务器集群系统介绍

本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目的产生背景和目标,并描述了LVS服务器集群框架及目前提供的软件,列举LVS集群系统的特点和一些实际应用,最后,本文谈论了LVS项目的开发进展和开发感触。1. 背景当今计算机技术已进入以网络为中心的计算时期。由于客户/服务器模型的简单性、易管理性和易维护性,客户/服务器计算模式在网上被大量采用。在九十

2015-12-11 16:04:26 490

转载 LVS集群中的IP负载均衡技术

LVS集群中的IP负载均衡技术2002 年 4 月本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点。1.前言在 前面文章中,讲述了可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出

2015-12-11 16:02:14 803

转载 SYN Flood 攻擊的基本原理及防禦

SYN Flood 攻擊的基本原理及防禦第一部分 SYN Flood的基本原理SYN Flood是當前最流行的DoS(拒絕服務攻擊)與DDoS(分散式拒絕服務攻擊)的方式之一,這是一種利用TCP協議缺陷,發送大量偽造的TCP連接請求,從而使得被攻擊方資源耗盡(CPU滿負荷或記憶體不足)的攻擊方式。要明白這種攻擊的基本原理,還是要從TCP連接建立的過程開始說起:大家都知道,TCP與

2015-12-11 14:31:16 583

转载 boost::thread

最近在做一个消息中间件里面涉及到多线程编程,由于跨平台的原因我采用了boost线程库。在创建线程时遇到了几种线程创建方式现总结如下:    首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(const boost::function0& thre

2015-11-19 16:39:02 564

转载 localtime 和 localtime_r

#include #include #include #include using namespace std;int main(int argc, char *argv[]){ time_t tNow =time(NULL); time_t tEnd = tNow + 1800; //注意下面两行的区别 struct tm* ptm = local

2015-10-27 16:37:28 456

转载 C++访问控制符private/protected/public

C++访问控制符有三个private、protected、public。一、简单可以归为以下两种描述:1)一个类友元(包含友元函数或者友元类的成员函数或者友元类的所有成员函数)可以访问该类的任何成员(包括成员变量及成员方法)。2)除去友元外,private成员只有该类自身的成员函数可以访问,protected成员只有该类及其派生类的成员函数可以访问,public成员则该类及其派

2015-10-16 09:44:20 589

转载 Nginx的slab page内存缓存机制

Nginx的内存缓存是通过slab pool来实现的,但是目前Nginx代码没有对http响应进行内存缓存。比如作为反向代理服务器时向后端获取的文件也只是缓存在磁盘里,而内存只是用来做索引。不过Nginx已经提供了内存缓存功能的函数,所以如果在其他地方有需要使用内存缓存的话,也可以通过修改代码来实现(当然,也可以用memory disk来实现内存缓存)。在Nginx的内存缓存机制中,最重要的结构就

2015-09-10 15:16:49 1447

原创 Java动态代理详解

JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两

2015-09-08 18:14:19 448

转载 java abstract类和interface的区别,精辟!

java里抽象类和接口的区别 下面的这篇文章讲的十分透彻了,所以转载之 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstrac

2015-09-07 17:43:29 607

原创 STL 配置器和容器,序列容器和关联容器总结

STL中定义了许多容器类型,这些类型在C++中非常实用。但是很多人却并没有理解为什么叫配置器和容器,下面做个总结:序列容器:数组、vector、list、deque、stack、queue、heap、priority-queue。这些类型存放的内容为value,并且在排放的逻辑上是一种线性结构。其中,stack、queue为配置器。为什么称他们为配置器,而不是容器呢?配置器的意思:修改

2015-09-07 11:04:02 1847

转载 [转载] STL allocator的介绍和一个基于malloc/free的allocator的简单实现

[转载] STL allocator的介绍和一个基于malloc/free的allocator的简单实现Allocators are one of the most mysterious parts of the C++ Standard library. Allocators are rarely used explicitly; the Standard doesn’t make it clea

2015-08-31 17:46:36 990

原创 C++ 内存布局占用情况

C++ 中内存分布比较复杂,主要分为堆、栈、.data区、代码段,在平时会涉及到一个类的内存大小,总结如下:1.       普通的成员函数不会占内存,但是普通的成员变量占内存。2.       Static的变量和函数都不会占内存。static数据存放于.data区中,并不在堆栈中。3.       Virtual成员函数(包括纯虚函数)会占内存,因为会有一个vptr

2015-08-20 10:35:27 592

原创 STL 源码学习笔记——vector

Vector结构定义vector所采用的数据结构非常简单:线性连续空间。它以两个迭代器start和finish分 别 指 向 配 置 得 来 的 连 续 空 间中 目 前 已 被 使 用 的 范 围 , 并 以 迭 代 器end_of_storage指向整块连续空间(含备用空间)的尾端:template <class T, classAlloc = alloc> class vector{ ..

2015-07-09 10:33:02 561

原创 nginx源码学习——Http连接对应的事件驱动模块

事件驱动函数事件驱动是nginx设计的核心,linux平台下,nginx会优先使用epoll进行事件处理。main—>master_process_cycle—>ngx_start_worker_process—>ngx_worker_process_cycle—>ngx_worker_process_init,ngx_process_events_and_timers。master进程中创建wor

2015-07-08 15:09:50 669

原创 nginx 源码学习——处理stale event

处理stale event添加到epoll后,worker进程会进入ngx_epoll_process_events函数,epoll_wait等待客户端发起连接请求,触发事件。而在对读写事件进行操作时,都会出现一个instance,这个变量到底是何用意? 我们首先看看man手册关于epoll的注解:*POSSIBLE PITFALLS AND WAYS TO AVOID THEM

2015-07-06 18:06:45 827

转载 Glibc 中malloc的实现

本文转自:http://blog.csdn.net/phenics/article/details/7770531 前言C语言提供了动态内存管理功能, 在C语言中, 程序员可以使用 malloc() 和 free() 函数显式的分配和释放内存. 关于 malloc() 和free() 函数, C语言标准只是规定了它们需要实现的功能, 而没有对实现方式有什么限制, 这多少让那些追根究底的人感到有些许迷

2015-07-02 10:19:22 1742

原创 nginx源码学习——进程间通信机制

进程架构nginx作为高性能的web服务器,采用的是多进程的方式,由一个master进程和若干个worker进程组成。作为web服务器,nginx的设计从头至尾体现两个字:性能。一般推荐worker进程数和机器的CPU核数相同。这样可以最大限度提升性能。 nginx的进程间通信主要涉及三个方面:master与操作系统的通信,master和worker进程的通信,worker进程与worker进程的

2015-07-01 18:03:24 854

原创 nginx源码学习——内存池

主要数据结构struct ngx_pool_s { ngx_pool_data_t d; //内存块的头结构体 size_t max; //内存块可被使用的最大空间 ngx_pool_t *current;//刚刚被分配完的块 ngx_chain_t *chain;

2015-07-01 14:40:08 574

原创 用Python实现Linux tree命令

早就耳闻python 功能强大,互联网领域运用广泛,Scrapy爬虫框架、OpenStack云存储架构都是用Python实现的。最近下定决心,开始学习Python。先参考网上的demo写一个小例子,实现linux tree命令。#!/usr/bin/pythonimport os, sys, stringclass XXXTree: def __init__(self):

2015-06-11 16:38:28 3224 2

原创 TCP 小记————三次握手四次挥手详解

今天抽空又重新回顾了下TCP协议。自然联想到TCP的三次握手,四次挥手机制。但是为什么要设计成三次握手?又为什么要设置成四次挥手呢?连接建立TCP是全双工通信,也就是同一个套接字,客户端和服务端都可以对其进行读和写。当客户端需要建立一个连接时,发起connect的同时,打通写通道,并向服务端发送SYN消息,同时将自身的状态置为SYN_SENT,等待服务端回复ACK。服务端在收到SYN后,将自身状态由

2015-05-15 18:52:28 19477

转载 浅析GLib

GLib是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。它能够在类UNIX的操作系统平台(如LINUX, HP-UNIX等),WINDOWS,OS2和BeOS等操作系统台上运行。GLib需要一个支持线程的操作系统和

2015-04-21 19:34:25 700

转载 GObject对象系统

简单的说,GObject对象系统是一个建立在GLIB基础上的,用C语言完成的,具有跨平台特色的、灵活的、可扩展的、非常容易映射到其它语言的面向对象的框架。如果你是一个C语言的执着的追随者,你没有理由不研究一下它。前言大多数现代的计算机语言都带有自己的类型和对象系统,并附带算法结构。正象GLib提供的基本类型和算法结构(如链表、哈希表等)一样,GObject的对象系统提供了一种灵活的、可扩展的、并容

2015-04-21 19:30:13 848

转载 Epoll在LT和ET模式下的读写方式

转载:http://www.ccvita.com/515.html 在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource tempora

2015-04-15 14:13:23 498

转载 epoll 内核实现

1 功能介绍epoll与select/poll不同的一点是,它是由一组系统调用组成。int epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wait(int epfd, struct epoll_event *events,in

2015-04-03 10:16:24 575

原创 进程间通信--管道、命名管道、FIFO

Linux 系统支持的进程间通信机制主要有:管道、有名管道和FIFO对比比较类似进程间的生产者、消费者模型。一个进程向管道中写入数据,另一个进程从管道中读出数据。pipe为无名管道,提供的是一组半双工通信方式。pipe会创建两个文件对象,一个索引节点。pipe在内核中会有一个缓存,缓存大小可能若干个页大小。调用write像管道里写数据时,系统会将数据存于缓存,另一个线程通过read从缓

2015-04-02 19:52:00 794

原创 memcached 源码分析——半同步、半异步模式

memcached 是目前应用非常广泛的缓存服务器,采用的是半同步、半异步模式。半同步、半异步半同步/半异步模型的基础设施:主线程创建多个子线程(这些子线程也称为worker线程),每一个线程都维持自己的事件循环,即每个线程都有自己的epoll,并且都会调用epoll_wait函数进入事件监听状态。每一个worker线程(子线程)和主线程之间都用一条管道相互通信。

2015-03-09 15:52:11 793

原创 libevent源码阅读笔记——时间管理

event_base对时间的管理libevent 中时间采用struct timeval作为时间类型,因为timeval在很多平台都支持,比如Windows、Linux。libevent接口传入到都是超时时间间隔,所以程序内部必须做转换。绝对时间=当前时间+超时时间间隔。正常情况下,系统的时间是一直递增的,所以计算后的绝对时间>当前时间。但是,用户的行为是永远难以捉摸的。

2015-02-15 14:18:35 860

原创 libevent源码阅读笔记——通用时间队列

由于libevent支持 /dev/poll, kqueue(2), event ports, POSIX select(2), Windows select(), poll(2), and epoll(4).多平台网络IO,所以根据不同平台,也定义了不同eventop对象,它们被统一放入结构体指针数组eventops[]里。 libevent运用二进制形式,区分5种事件类型。

2015-02-13 18:00:33 1268

转载 为什么libevent 放弃红黑树选择小根堆

首先什么是小根堆:(1)它是一颗完全二叉树(2)任意一个节点均小于或等于其左右子节点的关键码(大根堆相反就是了)因此可以得知,当前树形结构的根节点就是当前整个树形结构最小的节点。。。至于说这种堆结构有什么作用:(1)以前本科的时候上数据结构课的时候就有讲过堆排序,好像还不错,O(nlogn)的复杂度(2)可以用来构造优先权队列。。。。

2015-02-13 16:36:22 2734

WebKit技术内幕——朱永盛

WebKit技术内幕——朱永盛 完整版 非常适合学习webkit的同学

2018-05-22

机器学习实战源代码和数据

机器学习实战 源代码

2017-01-13

机器学习实战

机器学习实战 pdf

2017-01-13

Python核心编程

本文档为清晰版,可以直接打印。Python核心编程是一本很好的书,内容由浅入深,适合初学者也适合深入学习。是学习Python的经典书籍。

2015-07-01

GStreamer开发手册中文版

gstreamer开发手册,很实用。里面有一些例子,可以用来参考。便于开发者理解。

2015-06-02

libevent源码2.0.21稳定版

libevent 是一套通用的跨平台的高效的开源代码,实现异步IO复用,很多服务器程序基于libevent进行的开发。比如互联网行业运用广泛的memcached。阅读源码对属性互联网服务器开发很有益处。

2015-02-15

memcached 源码1.4.22

memcached是当前互联网行业运用广泛的缓存服务器,如果想熟悉其内部原理,最好的方式就是阅读源码。

2015-02-15

C/C++算法大全

这是一本算法内的书,叫你基础C/C++算法

2011-10-24

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除