stl的容器库非常强大,但是为了要兼容各种元素类型,采用了模板进行泛化,这样的好处就是使用非常的方便,但是编译器会对使用到的每种类型都进行一遍实例化,用的类型太多的话不仅影响编译速度而且生成的可执行文件也很冗余。
因此,TBOX在设计容器架构的时候,引入tb_item_func_t类型,来设置容器使用的成员类型,这样在实现容器通用性的同时,也不会产生过的冗余,而且容器接口操作上,同样相当的便利。
可以先看个简单使用哈希的例子:
```c
/* 初始化hash, 哈希桶大小8
* 键:大小写敏感字符串
* 值:long整型
*/
tb_hash_map_ref_t hash = tb
继续阅读 »
tbox的vector容器沿用了stl库中vector的命名,说白了就是以数组方式存储元素,也是整个容器库中最基础的容器之一。
当然,在c中用tbox的vector跟用stl的vector其实差不了太多,用起来都很方便。
先看个简单的例子熟悉下:
```c
// 初始化一个维护大小写敏感字符串的vector容器,第一参数设置元素自动增长大小,这里使用0表示默认大小
tb_vector_ref_t vector = tb_vector_init(0, tb_element_str(tb_true));
if (vector)
{
// 在头部插入元素
tb_vect
继续阅读 »
docker
docker 使用go语言开发,对进程进行封装隔离。
more
docker的三个基本概念
一、镜像(Image)
Docker中的文件系统(操作系统的完整root文件系统),提供容器运行时所需的程序,文件,资源,配置及配置参数(匿名卷,环境变量,用户),镜像不会包含任何动态数据,其中的内容在构建后不会发生任何的变化,Docker的镜像设计基于Union FS设计为分层存储的架构。镜像的构建一层一层前者是后者的基础,构建完成后不再发生变化。
二、容器(container)
容器是镜像的运行实体(实质为进程),容器运行时以镜像为基础层创建当前的容器存储层,容器存储层的生命周期与容器相同,保存于容器存储层
继续阅读 »
我们知道在Java在所有类的父类是Object,容器自然也不例外。因此容器都有toString()方法,并且覆写了该方法,使容器生成的String结果能够表达容器自身,以及容器所有包含的对象。例如ArrayList的toString()方法,它会遍历ArrayList中包含的所有对象,调用每个对象的toString()方法。
继续阅读 »
stl的容器库常用模式就是将容器、迭代器和算法的进行分离,容器专于存储,迭代器负责枚举,这样互相独立好处多多。
因此TBOX也借鉴了这种模式,不同的是没用模板,仅仅用了c语言来实现。容器库里面的大部分容器都是继承自迭代器的,所以迭代起来相当的方便。
下面先看个迭代器使用的例子:
继续阅读 »
TBOX提供了各种常用算法,对容器中的元素进行各种操作,这里主要介绍下排序和查找算法。
排序算法目前支持如下几种:
快速排序:tb_quick_sort
堆排序: tb_heap_sort
插入排序:tb_insert_sort
冒泡排序:tb_bubble_sort
并且提供通用的tb_sort接口,对各种排序算法进行自动适配,使得任何情况下,性能都是最优的。
例如:
对具有随机迭代特性的容器,采用快速排序来优化
对具有随机迭代特性,并且是超大规模的容器,采用堆排序
对只能线性迭代的容器采用冒泡排序
继续阅读 »
Magnum 简介
Magnum 是 OpenStack 社区在巴黎峰会(2014.11)后开始的一个新的专门针对Container的一个新项目,用来向用户提供容器服务。Magnum 项目曾经红极一时,发展迅猛,这一点其实从 Magnum 相对详细的开发者文档和提供 horizon plugin 以及 puppet module 就能看得出来,一般的小项目很少能提供这么多可用组件。但随着 OpenStack 社区的分化,以及容器功能从 Magnum 中剥离,Magnum 被限制在仅提供创建和维护 COE 的能力,而且随着容器社区的高歌猛进,很多 Magnum 的开发者(或者说 OpenStack 开发者)都去玩容器相关的项目(Do
继续阅读 »
1. 迭代器模式
提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式的结构:
抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。
具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方
继续阅读 »
Compose
Compose定义和运行多个Docker容器的应用,实现对Docker容器集群的快速编排。通过一个docker-compose.yml模板文件,定义一组相关联的服务(容器应用)为一个项目(由多个服务组成的完整的业务单元)。
Compose的使用
命令
Compose的命令对象默认指定为项目,使用 docker-compose [COMMAND] --help或docker-compose help[COMMAND]可以查看某个具体命令的使用格式。
shell
docker-compose [-f=...] [options] [COMMAND] [ARGS...]
命令选
继续阅读 »
本文翻译自文章Service Discovery via Consul with Amazon ECS
现如今随着微服务架构的出现,很多应用都是以一套分布式组件的形式来部署。在这样的架构中,你需要在多个EC2实例上的多个Docker容器中,配置和协调各种各样的应用程序。
亚马逊EC2容器服务(ECS)提供了一个用于管理资源、任务以及容器调度的集群管理框架。但是,很多应用仍然需要额外的组件来管理分布式组件之间的联系。服务发现的概念就是用来定义这种帮助管理这些联系的组件。
继续阅读 »