摘要: 需要entrypoint.sh和启动命令行配合完成: 在entrypoint.sh中动态增加所需的UID和GID: groupadd --force --gid $APP_GID $APP_USER useradd -c 'container user' -u $APP_UID -g $APP_GI 阅读全文
posted @ 2022-07-13 17:25 CodeComposer 阅读(55) 评论(0) 推荐(0) 编辑
摘要: #ifndef _SINGLETON_H_#define _SINGLETON_H_ template<typename T>class Singleton : public Uncopyable {public:template <typename... ArgTypes>static T* ge 阅读全文
posted @ 2019-10-23 16:02 CodeComposer 阅读(417) 评论(0) 推荐(0) 编辑
摘要: C/C++编译过程主要分为4个过程 编译预处理 编译、优化阶段 汇编过程 链接程序 宏是在预处理阶段由预处理器直接替换的,处理的是token,会将所有的name用token string代替,得到的结果仍然是程序文本。而内联函数是在编译期完成展开的,其代码将直接嵌入到汇编程序的文本段。 阅读全文
posted @ 2016-10-19 13:48 CodeComposer 阅读(234) 评论(0) 推荐(0) 编辑
摘要: inline关键字仅仅是对编译器的建议,编译器有权力决定一个函数是否在调用处嵌入。因为内联函数要在调用处展开,编译器必须能在每一个调用处能看到该函数的定义,因此最好将函数实现放在头文件中(而且实现在类定义中的成员函数即便不加inline关键字也会自动成为内联函数)。在实现文件中该函数之前要加上inline关键字的方式是有问题的:如果调用的obj文件在函数定义之前生成,那么该处就无法嵌入内联函数了。... 阅读全文
posted @ 2016-10-19 13:47 CodeComposer 阅读(3076) 评论(0) 推荐(1) 编辑
摘要: 对于字符串,所用的hash函数为: size_t _Hash_bytes(const void* ptr, size_t len, size_t seed) { static const size_t mul = (((size_t) 0xc6a4a793UL) (ptr); // Remove the bytes not divisible by the sizeof(si... 阅读全文
posted @ 2016-10-19 13:42 CodeComposer 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 首先要明确,virtual是用于支持类多态的关键字,所以出现在类声明之外的地方都是错误的。由此可以断定下文的1。 普通函数(即非类成员函数)不能是virtual的,否则不能通过编译,virtual只能出现在类声明中。 构造函数(拷贝构造函数/赋值构造函数)不能是virtual的。编译器会为每一个含有virtual函数生成一个函数表(位于rodata段),每个类实例的最前端会包含一个指向该表的指... 阅读全文
posted @ 2016-10-19 13:42 CodeComposer 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 客户端分片,这种方式需要实现特定的客户端,需要手工配置redis实例并根据算法进行访问,对于redis实例的增减,调整灵活性很差,一般不推荐。 代理分片,常见的有Twemproxy架构(豆瓣创建了codis,未测试过,在此从略): 优点 sharding逻辑对开发透明,读写方式和单个redis一致。 可以作为cache和storage的proxy(by auto-e... 阅读全文
posted @ 2016-10-19 13:19 CodeComposer 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 在C++程序中,内存问题除了非法改写,还有另一个很重要也很频繁出现的问题是堆内存未释放。如果在高负载网络应用中,出现这个问题,很快会导致服务崩溃。以前检测此类问题的办法是在每一个内存分配和释放处加上log,然后人肉debug,但是……面对几十万行内存分配/释放trace,相信大多数人会丧失查找问题所 阅读全文
posted @ 2016-09-05 16:01 CodeComposer 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 本文所讨论的“内存”主要指(静态)数据区、堆区和栈区空间(详细的布局和描述参考《Linux虚拟地址空间布局》一文)。数据区内存在程序编译时分配,该内存的生存期为程序的整个运行期间,如全局变量和static关键字所声明的静态变量。函数执行时在栈上开辟局部自动变量的储存空间,执行结束时自动释放栈区内存。 阅读全文
posted @ 2016-09-01 14:39 CodeComposer 阅读(6630) 评论(0) 推荐(0) 编辑
摘要: 网络IO的虚拟化模型随着技术发展,出现了多种方式,例如emulation、para-virtualization、pass-through和SR-IOV等,本文试图对其做一个简单的总结。 Emulation(仿真): 全虚拟化是最早出现的IO虚拟化方式,效率也最低。以接收网络报文为例,其处理步骤可以简单描述如下: 数据包到达主机物理网卡,向host CPU发出中断。QEMU创建的网桥(br... 阅读全文
posted @ 2015-08-12 03:49 CodeComposer 阅读(1273) 评论(0) 推荐(0) 编辑