自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (1)
  • 收藏
  • 关注

原创 SWIG之为C/C++的API生成Python调用接口基础

现在游戏业务的cache基本都是接入公司服务TCA,以前业务自己拥有cache的时候我们可以很方便去通过脚本去访问玩家的数据,所以最近想能不能对公司服务TCA生成Python的访问接口,由于公司服务TCA只提供了C++ API屏蔽了底层的协议数据细节,不太好直接写Python访问接口,偶然间接触到了SWIG,差不多花了一周时间,通过官方手册完成了SWIG对公司服务TCA Python 接口的封装。这

2017-12-06 16:11:58 1073

原创 TCP连接的建立和关闭详解

本文梳理了TCP连接的建立和关闭的一些细节,以及TCP连接的各种特殊状态的说明

2017-04-07 10:29:18 5355

原创 Linux内核时钟系统和定时器实现

1. Linux内核时钟系统和定时器实现Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式:系统启动后,会读取时钟源设备(RTC, HPET,PIT…),初始化当前系统时间;内核会根据HZ(系统定时器频率,节拍率)参数值,设置时钟事件设备,启动tick(节拍)中断。HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断的间隔时间。在我电脑上,HZ=250, 一个t

2016-07-25 13:27:30 22667 2

原创 进程中的地址是从何而来

写了这么多年代码,地址这个东西每天都会使用,那么今天总结一下地址这个东西的由来。 本文参考了参考了《程序员的自我修养》一书. 先看看下面代码:#include <iostream>#include <cstdint>void fun(){ std::cout<<"this a fun() "<<std::endl;}uint32_t a = 1;int main(){ u

2016-06-30 09:56:23 3487 6

原创 nginx conf文件结构介绍以及相关配置

本文简单介绍nginx conf文件的结构,已经如何进行配置:如何配置nginx提供静态内容,如何配置nginx作为代理服务器,如何配置转发请求到FastCGI服务Nginx进程模型:1个主进程,n个工作进程,主进程负责配置和工作进程的管理,实际的请求由工作进程进行处理。Nginx是基于事件驱动和多路复用的工作模型。1. nginx启停nginx的启动可以直接执行nginx的bin文件, 当

2016-03-21 22:29:21 11881 2

原创 通过Hexo在GitHub搭站全记录

GitHub本身支持建站:只需在自己的repos下建立一个名为:username.github.io的repo,然后在该repo下发布静态站点文件可以了。 下面是详细的在linux下建站流程:1.Hexo的安装Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 Hexo的安装依赖:NodejsGi

2016-01-16 17:21:46 3041

原创 github项目开发协作流程图

下面是一张简单的github项目协作开发的流程图,关键有几个概念:Fork + Pull模式,有一片文章不错:外站链接。远程仓库流程描述如下: 1. 在github主站上fork出自己要参与的项目到自己github上,这里grpc/grpc为例 2. git clone自己github上的anonymalias/grpc. 3. 在clone下来的orgin仓库进行开发(也可以自己

2016-01-12 16:05:30 2369

原创 Boost:managed_mapped_file及C++内存分配和对象构造分析

Boost的提供了一套ipc的接口,内存映射文件将文件的内容映射到进程的地址空间。#include <boost/interprocess/file_mapping.hpp>原生的file_mapping接口提供了创建一个内存映射文件,然后通过mapped_region进行进程地址空间的映射,获取映射到进程空间的地址,并在此地址进行对象的构造和操作。由于直接在映射的地址进行复杂数据结构的构造很复杂的

2016-01-11 14:35:02 7505 2

原创 Linux login & non-login shell 以及su, sudo相关概念

1.login & non-login shellLinux系统自举时,内核会创建init进程,来进行一系列的系统初始化操作。每一个用户登录shell时,无论以伪终端登录:ssh,X11下控制台,还是tty控制台终端,都会读取相关相关的登录配置文件。linux 有两种登录shell:login和nologin:login shell:登录shell时需要完整登录,称为 login

2014-12-13 23:34:04 4916

原创 SecureCRT的logon action登录跳转设置

在公司干活,大家都要经常通过跳板机跳到外网的服务器上,如果每次都要先登录跳板机,然后再ssh到外网的服务器,的确有点坑,特别是在服务器数量较多的情况下,之前就用过securecrt的logon actions设置,但这次无论怎么样都无法直接调到外网的机器,原来对logon actions的跳转原理还是不清晰。首先讲如下进行跳转把:点击logon actions菜单,选中Automate l

2014-12-12 20:16:40 12211

原创 samba服务器安装和配置

作为后台开发人员,在代码开发过程中,我们开发流程一般是本地开发->同步到服务器编译->svn提交。如何在团队开发中高效处理这些步骤是个很基本的问题。通常我们的本地环境大多是Windows,通过ssh客户端远程连接到服务器,一般由于后台代码的庞大,我们的都会有自己的编译环境,如何在开发过程中及时的将代码编译,更新到版本库有很多种方法,例如有sshclient,securecrt都可以支持ftp协议进

2014-12-12 14:48:50 6066

原创 protobuf入门

protobuf全称Protocol Buffers,是google推出的一种高效,快捷的数据交换格式,和XML,Thrift一样,都是一种数据交换协议(当然thrift还提供rpc的功能)。protobuf相对与xml结构化的文本数据格式,它是一种二进制的数据格式,具有更高的传输,打包和解包效率,这也是为什么protobuf很受欢迎的原因。protobuf通过自己的编译器,对协议文件进行

2014-11-24 00:53:23 6543 1

原创 C++静态初始化的顺序

这两天项目代码中遇到一个很疑惑的问题,问题可以描述为:一个静态成员初始化的时候直接core掉,该静态成员初始化时通过另外一个文件中静态成员来完成。该问题同样发生在全局对象上。该问题可以描述为今天要讨论的:变量的静态初始化顺序。具体可以用代码简述如下://test1.cpp#include std::string a = "test"; //test2.cpp#inclu

2014-08-10 21:23:27 7622 3

原创 版本控制之svn和git简述

参考:Pro gitSvn book 1.6TortoiseSVN-1.8.7-zh_CN在一个团队的工作中,掌握版本控制系统的使用是对每一个工程师最基本的要求,作为刚入职的菜鸟我来说,更是需要快速掌握的,下面就简单记录一下svn以及git版本控制的基础知识。1. 版本控制的概念                                                  

2014-06-28 21:56:53 2579

原创 C++标准I/O库:iostream, fstream, sstringstream

在写代码的过程中,我们最常做的事就是io,无论

2014-06-09 21:29:47 6252 1

原创 Thrift的安装和简单示例

本文只是简单的讲解Thrift开源框架的安装和简单使用示例,对于详细的讲解,后面在进行阐述。Thrift简述                                                                       Thrift是一款由Fackbook开发的可伸缩、跨语言的服务开发框架,该框架已经开源并且加入的Apache项目。Thrift主要功能

2014-05-19 02:09:24 9680 4

原创 Code::Blocks之It seems that this file has not been built yet.

这两天在学习Objective-C,在Windows下面通过GNUstep和Code::Blocks的结合来进行代码的编辑和测试。关于GNUstep和Code::Blocks的环境的配置网上有很多教程,这里就不说了,配置好之后通过Code::Blocks进行工程的创建,然后测试第一个Hello World程序,没有任何问题,具体流程如下:File--->New--->Project--->Co

2014-03-11 16:45:31 26186 8

原创 Linux下将整数格式化成二进制表示的字符串

数据的格式化输出是我们在编程过程中经常要做的事情,我们最常用的莫过于sprintf函数。当然还有sprintf衍生出来的一些函数,譬如安全的snprintf。还有一个需要提到的就是不属于C标准的itoa函数。int sprintf ( char * str, const char * format, ... ); //成功返回写入str的字符个数,不包含结尾符,出错则返回负数

2013-12-01 21:46:28 5560

原创 Linux和Windows下文件和目录的相关属性及操作

我们知道C/C++都提供了标准的文件I/O库以便我们对文件进行读写。但我们无法通过标准的I/O库对文件系统进行更进一步的操作。因为这设计到具体操作系统中文件系统的设计。在Linux和Windows程序库下面都有一个sys目录,里面包含系统相关的头文件,如下:Windows下:C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sy

2013-11-30 17:52:35 10191 1

原创 面试算法之排序算法集锦

排序算法在面试过程中是经常会考的,这是很基础的,面试官觉得你应该很熟悉这些东西,如果你半个小时内写不出来,那基本就给跪了,因为这真的是狠基础狠基础的东西,所以我们得对一些基本的排序算法烂熟于胸,对这些排序思想,效率了如指掌,才能让面试官觉得你还行。基本的排序算法有:直接插入排序,冒泡排序,简单选择排序,shell排序,归并排序,快速排序,堆排序。其中归并,快速,堆排序是面试时候比较喜欢考的,因为这

2013-09-11 03:04:03 6898 17

原创 面试算法之链表操作集锦

链表操作在面试过程中也是很重要的一部分,因为它和二叉树一样都涉及到大量指针的操作,而且链表本身很灵活,很考查编程功底,所以是很值得考的地方。下面是本文所要用到链表节点的定义:template struct ListNode{ Type data; ListNode *next;};链表的创建可以采用下面的代码,采用尾插法进行链表的创建,返回的链表没有头节点:/** *

2013-09-04 21:24:34 3896 3

原创 面试算法之二叉树操作集锦

开学了,找工作也正式拉开了序幕,每天光自己看书,也很没劲,和大家一起分享分享,交流一下笔试面试过程中的各种算法题目,希望大家一起进步。。。下面是对数据结构二叉树的一些基本操作,可能在面试中都会涉及到。我们都知道二叉树的定义本身就是一种递归定义,所以对树的大部分操作都可以通过递归的方式进行,但递归不是万能的,因为递归的本身是一件很浪费内存资源的操作,所以在选择算法的时候要权衡各种因素,选取最合理

2013-09-03 17:41:54 3842 8

原创 Linux进程通信之System V共享内存

前面已经介绍过了POSIX共享内存区,System V共享内存区在概念上类似POSIX共享内存区,POSIX共享内存区的使用是调用shm_open创建共享内存区后调用mmap进行内存区的映射,而System V共享内存区则是调用shmget创建共享内存区然后调用shmat进行内存区的映射。对每个System V共享内存区,内核会维护一个shmid_ds的数据结构,Linux 2.6.18 中的

2013-08-13 22:21:02 3756

原创 Linux进程通信之POSIX共享内存

前面已经讨论过Linux下个各种进程间的通信方式:管道,FIFO,消息队列,他们的共同特点就是通过内核来进行通信(假设POSIX消息队列也是在内核中实现的,因为POSIX标准并没有限定它的实现方式)。向管道,FIFO,消息队列写入数据需要把数据从进程复制到内核,从这些IPC读取数据的时候又需要把数据从内核复制到进程。所以这种IPC方式往往需要2次在进程和内核之间进行数据的复制,即进程间的通信必须借

2013-08-13 01:09:19 11282 1

原创 Linux进程通信之System V消息队列

System V消息队列是Open Group定义的XSI,不属于POSIX标准。System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的系统内核中,后来商用UNIX系统基本都加入了System V IPC的功能。System V消息队列相对于POSIX消息队列的区别主要是:POSIX消息队列的读操作总是返回消息队列中优

2013-08-08 08:53:41 5910 2

原创 Linux进程通信之POSIX消息队列

消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。消息队列和之前讨论过的16.1管道和FIFO有很大的区别,主要有以下两点:l 一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必需已经打开来读,否则写进程就会阻塞(默认情况下)。l IPC的持续性不同。

2013-08-07 08:53:42 29034 18

原创 Linux进程通信之管道和FIFO

Linux进程间的通信可以简称为IPC(Interprocess Communication),前面说过的 Linux的同步工具也是属于IPC的一部分,这里我想说的是通常意义的进程间的实际数据通。1管道管道是最早的UNIX IPC,所有的UNIX系统都支持这个IPC通信机制。我们最常见到使用它的位置就是shell中使用的管道命令。管道IPC有两个特性:管道仅提供半双工的数据通信,即

2013-07-20 16:51:23 10025 3

原创 Linux进程同步之System V 信号量

System V信号量是不属于POSIX标准,它属于SUS(Single UNIX Specification)单一规范中的扩展定义。它和POSIX信号量一样都提供基本的信号量功能操作。System V信号量相对于POSIX信号量最大的区别是在信号量的操作复杂度。在POSIX信号量中说过,根据信号量取值(代表可用资源的数目)的不同,POSIX信号量可以分为:二值信号量:信号量的值只

2013-07-04 00:26:53 7485 3

原创 Linux进程同步之POSIX信号量

POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分。在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V信号量的系统接口。信号量作为进程间同步的工具是很常用的一种同步IPC类型。在《UNIX网络编程 卷2:进程间通信》的前言第二页与第1版的区别中作者提到“POSIX IPC函数时大势所趋,因为他们比

2013-07-01 22:14:15 19554 1

原创 二叉排序树转换成排序的双向链表

题目描述:将二叉排序树转换成一个排序的双向链表,要求:不能创建任何新的节点,只能通过调整指针的指向来实现;解题思路:我们知道二叉排序树的递归定义是:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树;二叉排序树的一个很重要的特性就是:二叉树中序遍历的结果是一个递增的

2013-06-29 23:14:31 8846 1

原创 Linux进程同步之记录锁(fcntl)

记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作。尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记录上锁往往更容易使用,且效率更高。记录锁的功能:当一个进程正在读或修改文件的某个部分是,它可以阻止其他进程修改同一文件区。对于这个功能阐述我认为有三点要解释的:记录锁不仅仅可以用来同步不同

2013-06-28 16:04:53 8690 4

原创 Linux线程同步之读写锁(rwlock)

读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,和互斥量不同的是:互斥量会把试图进入已保护的临界区的线程都阻塞;然而读写锁会视当前进入临界区的线程和请求进入临界区的线程的属性来判断是否允许线程进入。相对互斥量只有加锁和不加锁两种状态,读写锁有三

2013-06-26 00:07:10 27438 8

原创 Linux线程同步之条件变量

条件变量变量也是出自POSIX线程标准,另一种线程同步机制,。主要用来等待某个条件的发生。可以用来同步同一进程中的各个线程。当然如果一个条件变量存放在多个进程共享的某个内存区中,那么还可以通过条件变量来进行进程间的同步。每个条件变量总是和一个互斥量相关联,条件本身是由互斥量保护的,线程在改变条件状态之间必须要锁住互斥量。条件变量相对于互斥量最大的优点在于允许线程以无竞争的方式等待条件的发生。当

2013-06-25 23:49:33 8097

原创 Linux线程同步之互斥量(mutex)

互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程。当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源。互斥量类型声明为pthread_mutex_t数据类型,在中有具体的定义。

2013-06-25 23:31:07 22031 1

原创 Windows线程同步之Slim读写锁(SRWLock)

Slim读写锁简称SRWLock,它的目的和临界区相同,对一个资源进行保护,不让其他线程访问。但是不同的是SRWLock允许我们区分哪些线程是读取共享资源的值,哪些线程是修改共享资源的值。所有读线程在同一时刻可以访问共享资源,因为这些线程不会破坏共享资源,只有当写线程要访问共享资源时,才需要进行同步。写线程应当独占式访问资源,其他任何线程都不允许访问资源。这就是SRWLock提供的全部功能。所

2013-06-19 23:28:52 5694

原创 Windows线程同步之临界区对象(Critical Section)

我们也可以通过临界区保证在同一时间内只有一个线程对共享数据进行控制访问。临界区不是内核对象,只能对进程内部的线程进行同步。临界区对象是定义在数据段中的一个CRITICAL_SECTION结构,Windows内部使用这个结构记录的一些信息,来确保同一个时间只有一个线程访问该临界区保护的数据。临界区对象使用要调用的函数接口如下:(1)InitializeCriticalSection(

2013-06-19 22:57:20 4600 5

原创 Windows线程同步之互锁函数(Interlocked)

Windows下进程内部的各个线程之间的同步不需要借助内核对象,Windows提供的默认在用户模式下的线程同步工具。互锁函数为多线程同步访问共享变量提供了一个简单的机制。如果变量在共享内存,不同进程的线程也可以使用此机制。互锁函数对共享变量的操作是原子的,这个原子性体现在保证多线程在同一个时刻只能有一个线程获得对该同步变量的操作权限。(1)InterlockedExchangeAdd(

2013-06-19 22:27:10 2273

原创 Windows进程同步之信号量内核对象(Semaphore)

信号量内核对象主要包括三个部分:使用计数,最大资源计数,当前资源计数。使用计数:和其他内核对象一样,用来标识使用该事件对象的不同线程个数;最大资源计数:表示信号量控制的最大资源的数目;当前资源计数:表示信号量当前可用的资源数目;信号量使用规则如下:如果当前资源计数大于0,信号量处于触发状态; 如果当前资源计数等于0,那么信号量处于未触发状态;系统绝不会使当前资源计数变为负数

2013-06-19 01:28:37 9517 2

原创 Windows进程同步之事件内核对象(Event)

在所有的内核对象中,事件内核对象比其他的简单的多,可以用事件内核对象对不同进程进行同步。事件内核对象主要包括三个部分:使用计数,一个表示是自动还是手动重置事件的布尔值,一个表示是否有信号的布尔值。使用计数:和其他内核对象一样,用来标识使用该事件对象的不同线程个数。表示自动或手动重置事件的布尔值:当一个事件是自动重置事件,事件被触发后,只有一个等待的线程会变成可调度状态(根据系统的调度策

2013-06-14 12:52:18 6484 1

原创 Windows进程同步之互斥量内核对象(Mutex)

我们知道进程间的同步操作都是要借助内核来完成的,和同一个进程中的线程同步只需要在用户模式下是有很大差别的,当然,对于进程安全的,对于线程肯定也是安全的,但在用户模式下的线程同步所需消耗的代价相对于通过内核完成的同步是很小的。所以不要利用进程同步的方式来进行同一进程中线程的同步。这里先讨论进程同步的方式之一:互斥量(Mutex)。互斥量内核对象能够确保一个进程独占对一个资源的访问。互斥量与关

2013-06-12 21:58:08 8302 1

计算机图形学VC实现源代码

计算机图形学VC实现源代码,里面有各种基本的图形实现算法,仅供学习。

2012-01-06

空空如也

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

TA关注的人

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