- 博客(127)
- 收藏
- 关注
转载 ZeroMQ API(八) 异常&属性
1、错误处理1.1 zmq_errno()1.1.1 名称 zmq_errno - 为调用线程检索errno的值1.1.2 概要 int zmq_errno(void);1.1.3 描述 zmq_errno()函数将检索调用线程的errno变量的值。 zmq_errno()函数用于帮助非POSIX系统上的用户直接检索errno的正确值时遇到问题。 ...
2018-04-27 22:25:00
420
转载 ZeroMQ API(七) 安全
1、无安全性:zmq_null(7)1.1 名称 zmq_null - 没有安全性或机密性1.2 概要 NULL机制由ZMTP 3.0规范定义:http://rfc.zeromq.org/spec:23。 这是ZeroMQ套接字的默认安全机制。2、使用用户名和密码进行纯文本身份验证:zmq_plain(7)2.1 名称 zmq_plain - 明文认证...
2018-04-27 22:21:00
604
转载 ZeroMQ API(六) 代理
1、zmq_proxy(3)1.1 名称 zmq_proxy - 开始内置ZMQ代理1.2 概要 int zmq_proxy(const void * frontend,const void * backend,const void * capture);1.3 描述 zmq_proxy()函数在当前应用程序线程中启动内置的ZMQ代理。 代理将前端套接...
2018-04-27 22:16:00
497
转载 ZeroMQ API(五) 传输模式
1、使用TCP的单播传输:zmq_tcp(7)1.1 名称 zmq_tcp - 使用TCP的ZMQ单播传输1.2 概要 TCP是一种无处不在,可靠的单播传输。当通过具有ZMQ的网络连接分布式应用程序时,使用TCP传输可能是您的首选。1.3 解决 ZMQ端点是一个由transport://后跟一个地址组成的字符串。 transport指定要使用的基础协议。该地...
2018-04-27 22:13:00
823
转载 ZeroMQ API(四) 套接字
1、创建一个套接字1.1 zmq_socket(3)1.1.1 名称 zmq_socket - 创建ZMQ套接字1.1.2 概要 void * zmq_socket(void * context,int type);1.1.3 描述 zmq_socket()函数将在指定的上下文中创建一个ZMQ套接字,并向新创建的套接字返回一个不透明的句柄。 type参数...
2018-04-27 22:00:00
338
转载 ZeroMQ API(三) 消息
1、初始化消息1.1 zmq_msg_init(3)1.1.1 名称 zmq_msg_init - 初始化空的ZMQ消息1.1.2 概要 int zmq_msg_init(zmq_msg_t * msg);1.1.3 描述 zmq_msg_init()函数将初始化由msg引用的消息对象,以表示一个空的消息。 在使用zmq_recv()接收消息之前调用此函...
2018-04-27 21:28:00
156
转载 ZeroMQ API(二) 上下文
1、创建上下文1.1 zmq_ctx_new(3)1.1.1 名称 zmq_ctx_new - 创建新的ZMQ上下文1.1.2 概要 void * zmq_ctx_new();1.1.3 描述 zmq_ctx_new()函数创建一个新的?MQ上下文。该函数替换弃用函数zmq_init(3)。1.1.4 线程安全 ZMQ上下文是线程安全的,可以根...
2018-04-27 21:07:00
249
转载 ZeroMQ API(一) 总序
序 zeromq是一个轻量级的消息库。它扩展了标准的套接字接口,其特性与传统的消息中间件不同,zeromq提供异步消息队列、多消息传递模式、消息过滤(订阅)、无缝访问多个传输协议等的抽象。 本系列API文章基于ZMQ4.1.7编写。1、上下文 在使用任何ZMQ的库函数之前,必须创建ZMQ上下文,并且,当你退出程序,也必须销毁上下文,和上下文相关的有这些函数: ...
2018-04-23 21:13:00
245
转载 linux ln链接详解
1、序 Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强...
2017-12-19 22:00:00
427
转载 再谈单例模式
1、背景 最近在看一个大佬写的服务器代码的时候,发现他写的单例模式代码很有趣,开始看的时候没看懂,后面研究了一把,发现这个代码其实就是boost里面的一种单例模式,虽然boost里面有很多单例模式,我们在这里就先研究我看到的这种。 我们来看最简单的单例模式:class QMManager{public: static QMManager &i...
2017-12-15 21:17:00
64
转载 优美的代码:do...while(0)
1、背景 最近再看一个开源代码的时候,看到很多宏经常这么写的:#define XXX do{\...\}while(0) 一眼看到的时候就知道这一份代码执行一次,那么do...while还有什么意义呢?在查阅了很多资料之后,才发现,do...while(0)用处太多了,所以在这里总结一下。2、总结2.1 辅助定义多语句宏 如果我们定义下列宏:...
2017-12-12 20:31:00
96
转载 半同步半异步线程池
1、半同步半异步线程池 在处理大量并发任务的时候,如果一个请求一个线程来处理任务,大量的线程创建将会消耗过多的资源,还增加了线程上下文切换的开销,而通过线程池技术可以很好的解决这个问题。 线程池技术通过在系统中预先创建一些线程,当任务请求来到的时候,从线程池中分配一个预先创建的线程来处理任务,在任务完成之后,线程不会销毁,还可以重用,等待下次任务的到来。这样就避免了大量线程的...
2017-12-03 19:44:00
161
转载 C11线程管理:异步操作
1、异步操作 C++11提供了异步操作相关的类,std::future、std::promise和std::package_task。std::future作为异步结果的传输通道,方便的获取线程函数的返回值;std::promise用来包装一个值,将数据和future绑定起来,方便线程赋值;std::pack_age用来包装一个可调用对象,将函数和future绑定起来,以便异步调...
2017-12-03 19:36:00
182
转载 C11线程管理:原子变量&单调函数
1、原子变量 C++11提供了原子类型std::atomic<T>,可以使用任意类型作为模板参数,使用原子变量就不需要使用互斥量来保护该变量,用起来更加简洁。 举个例子,如果要做一个计数器,使用mutex时和使用原子变量依次如下://使用mutex struct Counter{ int value; std::mutex m...
2017-12-03 19:30:00
241
转载 C11线程管理:条件变量
1、简介 C11提供另外一种用于等待的同步机制,它可以阻塞一个或者多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的线程。条件变量要和互斥量配合起来使用。 condition_variable,配合std::unique_lock<std::mutex>进行wait操作。 condition_variable_any,和任意带有lock、unl...
2017-12-03 19:28:00
336
转载 C11线程管理:互斥锁
1、概述 锁类型 c11提供了跨平台的线程同步手段,用来保护多线程同时访问的共享数据。 std::mutex,最基本的 Mutex 类,独占的互斥量,不能递归使用。 std::time_mutex,带超时的独占互斥量,不能递归使用。 std::recursive_mutex,递归互斥量,不带超时功能。 std::recursive_timed_mutex,带超时的递归...
2017-12-03 18:50:00
247
转载 C11线程管理:线程创建
1、线程的创建 C11创建线程非常简单,只需要提供线程函数就行,标准库提供线程库,并可以指定线程函数的参数。#include <iostream>#include <thread>void vFunc(int i, int j){ std::cout << i << " " << j &l...
2017-12-03 18:44:00
204
转载 C11关键字&字面值改善
1、原始字面值改善 原始字面值可以直接表示字符串的实际含义,但是一些特殊字符就需要转义。std::string str = "D:\A\B\test.txt";std::cout << str << std::endl;//打印结果D:AB est.txt 那么这并不是我们想要的结果,C++中可以通过简单的方法可以改善这个...
2017-11-05 21:44:00
95
转载 C11构造函数的改善
1、委托构造函数 委托构造函数就是允许在同一个类中一个构造函数可以调用另一个构造函数,从而在初始化时简化变量的初始化。class CTest{public: int x; int y; int z;public: CTest(int a) { x = a; } CTe...
2017-11-05 21:41:00
119
转载 C11工具类:字符转换
1、数值类型和字符串转换1.1 数值转换为字符std::string to_string(int value);std::string to_string(long value);std::string to_string(long long value);std::string to_string(unsigned value);std::string to...
2017-11-05 21:38:00
310
转载 C11工具类:时间处理
C++11提供时间管理类,包括三种类型:时间间隔duration,时钟clocks,时间点time point。1、记录时常的duration1.1 原型 duration表示一段时间间隔,用来记录时间长度,可以表示时分秒等单位。其原型如下:template<class Rep, class Period = std::ratio<1, 1>&...
2017-11-05 21:35:00
286
转载 C11内存管理之道:智能指针
1、shared_ptr共享智能指针 std::shared_ptr使用引用计数,每个shared_ptr的拷贝都指向相同的内存,在最后一个shared_ptr析构的时候,内存才会释放。1.1 基本用法1.1.1 初始化 shared_ptr可以通过make_shared来初始化,也可以通过shared_ptr<T>辅助函数和reset方法来初始化。智能指...
2017-10-17 22:13:00
168
转载 C11性能之道:标准库优化
1、emplace_back减少内存拷贝和移动 emplace_back能通过参数构造对象,不需要拷贝或者移动内存,相比pusk_back能更好的避免内存的拷贝和移动,使容器插入元素性能得到进一步提升。几乎所有的标准库容器都增加了类型的方法:emplace,emplace_hint,emplace_front,emplace_after和emplace_back。 基本用法:...
2017-10-17 22:04:00
136
转载 C11性能之道:转移和转发
1、move C++11中可以将左值强制转换为右值,从而避免对象的拷贝来提升性能。move将对象的状态或者所有权从一个对象转移到另一个对象,没有内存拷贝。深拷贝和move的区别如图: 从图可以看出,深拷贝会有两份内存,而move只有一份,move只是将内存的所有者切换为目标对象,并没有移动任何东西,只是强制将左值转换为右值。 在C++11之前的拷贝构造函数和赋值函数...
2017-10-17 22:01:00
138
转载 C11性能之道:右值引用
1、左值与右值 C++11中新增了一种类型,右值引用,标记为T &&。 首先来介绍什么是左值和右值,左值是指表达式结束后依旧存在的持久对象,而右值是指表达式结束之后就不再存在的临时对象。一个区分左值与右值的简单方法就是: 能不能对表达式取值,如果能,则是左值,否则为右值。所有具名变量或对象都是左值,右值不具名。 其中,右值又有两个概念,将亡值和纯右...
2017-10-17 21:47:00
190
转载 C11简洁之道:tupe元祖
tuple元组是一个固定大小不同类型的值的集合,是泛化的std::pair。我们也可以把它当作一个通用的结构体来使用,不需要创建结构体有获取结构体特征,在某些情况可以取代结构体,使程序更简洁、直观。 tuple在C++11中使用简单,但是往往要和模板元的一些技巧结合使用。tuple<const char *, int> tp = make_tuple("he...
2017-10-12 22:09:00
332
转载 C11简洁之道:lambda表达式
1、 定义 lambda表达式是C++11非常重要也是很常用的特性之一,来源于函数式编程的概念,也是现代编程语言的一个特点。它有如下特点:声明式编程风格:就地匿名定义目标函数或者函数,不需要额外写一个命名函数或者函数对象,以更直接的方式写程序。简洁:不需要额外再写一个函数或者函数对象,避免了代码膨胀和功能分散。在需要的时间和地点实现功能闭包,使程序更加灵活。...
2017-10-12 22:05:00
420
转载 C11简洁之道:函数绑定
1、 可调用对象 在C++中,有“可调用对象”这么个概念,那么什么是调用对象呢?有哪些情况?我们来看看:函数指针;具有operator()成员函数的类对象(仿函数);可以被转换为函数指针的类对象;类成员(函数)指针。 我们来看代码://函数指针void func(void){ //...}struct Foo...
2017-10-12 21:56:00
130
转载 C11简洁之道:循环的改善
1、 for循环的新用法 在C++98/03中,通过for循环对一个容器进行遍历,一般有两种方法,常规的for循环,或者使用<algorithm>中的for_each方法。 for循环遍历:void func(void){ std::vector<int> arr; for(auto it = arr.begin();...
2017-10-12 21:39:00
298
转载 C11简洁之道:初始化改进
1、 C++98/03初始化 我们先来总结一下C++98/03的各种不同的初始化情况://普通数组int i_arr[3] = {1, 2, 3};//POD(plain old data)struct A{ int x; struct B { int i; int j; ...
2017-10-10 22:57:00
203
转载 C11简洁之道:模板改进
1、 右尖括号 我们在C++98/03中使用泛型编程的时候,经常遇到“>>”被当作右移操作符,而不是模板参数的结尾。假如我们有如下代码:template <typename T>class Foo{};void func(void){ vector<Foo<int>> test;} 使...
2017-10-10 22:40:00
114
转载 C11简洁之道:类型推导
1、 概述 C++11里面引入了auto和decltype关键字来实现类型推导,通过这两个关键字不仅能方便的获取复杂的类型,还能简化书写,提高编码效率。2、 auto2.1 auto关键字的新定义 auto关键字并不是一个全新的关键字,早在旧标准中就已经有定义:“具有自动储存期的局部变量”,不过用处并不大,如下:auto int i = 0; //c+...
2017-10-10 22:29:00
281
转载 【设计模式】 模式PK:包装模式群PK
1、概述 我们讲了这么多的设计模式,大家有没有发觉在很多的模式中有些角色是不干活的?它们只是充当黔首作用,你有问题,找我,但我不处理,我让其他人处理。最典型的就是代理模式了,代理角色接收请求然后传递到被代理角色处理。门面模式也是一样,门面角色的任务就是把请求转发到子系统。类似这种结构的模式还有很多,我们先给这种类型的模式定义一个名字,叫做包装模式(wrappingpattern)。...
2017-09-05 23:28:00
307
转载 【设计模式】 模式PK:门面模式VS中介者模式
1、概述 门面模式为复杂的子系统提供一个统一的访问界面,它定义的是一个高层接口,该接口使得子系统更加容易使用,避免外部模块深入到子系统内部而产生与子系统内部细节耦合的问题。中介者模式使用一个中介对象来封装一系列同事对象的交互行为,它使各对象之间不再显式地引用,从而使其耦合松散,建立一个可扩展的应用架构。2、中介者模式实现工资计算2.1 类图 大家工作会得到工资,那么工...
2017-09-05 22:56:00
192
转载 【设计模式】 模式PK:策略模式VS桥梁模式
1、概述 我们先来看两种模式的通用类图。 两者之间确实很相似。如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样?完全一样!正是由于类似场景的存在才导致了两者在实际应用中经常混淆的情况发生,我们来举例说明两者有何差别。 大家都知道邮件有两种格式:文本邮件(TextMail)和超文...
2017-09-05 22:25:00
87
转载 【设计模式】 模式PK:观察者模式VS责任链模式
1、概述 为什么要把观察者模式和责任链模式放在一起对比呢?看起来这两个模式没有太多的相似性,真没有吗?回答是有。我们在观察者模式中也提到了触发链(也叫做观察者链)的问题,一个具体的角色既可以是观察者,也可以是被观察者,这样就形成了一个观察者链。这与责任链模式非常类似,它们都实现了事务的链条化处理,比如说在上课的时候你睡着了,打鼾声音太大,盖过了老师讲课声音,老师火了,捅到了校长这里...
2017-09-04 22:26:00
333
转载 【设计模式】 模式PK:策略模式VS状态模式
1、概述 行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下。 策略模式(左)和状态模式(右)的通用类图。 两个类图非常相似,都是通过Context类封装一个具体的行为,都提供了一个封装的方法,是高扩展性的设计模式。但根据两者的定义,我们发现两者的区别还是很明显的:策略模式封装的是不同的算法,算法之间没有交互...
2017-09-04 21:38:00
176
转载 【设计模式】 模式PK:命令模式VS策略模式
1、概述 命令模式和策略模式的类图确实很相似,只是命令模式多了一个接收者(Receiver)角色。它们虽然同为行为类模式,但是两者的区别还是很明显的。策略模式的意图是封装算法,它认为“算法”已经是一个完整的、不可拆分的原子业务(注意这里是原子业务,而不是原子对象),即其意图是让这些算法独立,并且可以相互替换,让行为的变化独立于拥有行为的客户;而命令模式则是对动作的解耦,把一个动作的...
2017-09-04 21:10:00
106
转载 【设计模式】 模式PK:装饰模式VS适配器模式
1、概述 装饰模式和适配器模式在通用类图上没有太多的相似点,差别比较大,但是它们的功能有相似的地方:都是包装作用,都是通过委托方式实现其功能。不同点是:装饰模式包装的是自己的兄弟类,隶属于同一个家族(相同接口或父类),适配器模式则修饰非血缘关系类,把一个非本家族的对象伪装成本家族的对象,注意是伪装,因此它的本质还是非相同接口的对象。 大家都应该听过丑小鸭的故事吧,我们今天就用...
2017-09-04 20:42:00
140
转载 【设计模式】 模式PK:代理模式VS装饰模式
1、概述 对于两个模式,首先要说的是,装饰模式就是代理模式的一个特殊应用,两者的共同点是都具有相同的接口,不同点则是代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,它着重类的功能变化,我们举例来说明它们的区别。2、代理模式 一个著名的短跑运动员有自己的代理人。如果你很仰慕他,你找运动员说“你跑个我看看”,运动员肯定不搭理你,不过你找到他的代理人就不一...
2017-09-04 19:35:00
148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人