tbox
waruqi
个人主页:https://tboox.org
展开
-
xmake v2.3.1 发布, 无缝对接其他构建系统
最近对xmake内部做了不少的重构来改进,并且新增了不少实用的新特性,欢迎来体验。项目源码官方文档一些新特性:一键编译其他构建系统维护的项目,实现无缝对接,并且支持交叉编译(比如autotools的快速交叉编译,见下文详述)新增xmake project -k ninja工程生成插件,支持对build.ninja构建系统文件的生成一些改进点:改进命令行参数输入,支持...原创 2020-02-24 21:30:41 · 1120 阅读 · 1 评论 -
xmake v2.2.9 发布, 新增c 20 modules的实验性支持
这个版本没啥太大新特性,主要对c 20 modules进行了实验性支持,目前支持clang/msvc编译器,除此之外改进了不少使用体验,并且提高了一些稳定性。另外,这个版本新增了socket.io支持以及对应协程io的调度支持,为下个版本的远程编译,以及后续的分布式编译做准备。项目源码官方文档新特性介绍c 20 modulesc modules已经正式纳入了c 20...原创 2019-12-22 21:18:23 · 1166 阅读 · 0 评论 -
xmake从入门到精通10:多个子工程目标的依赖配置
xmake是一个基于Lua的轻量级现代化c/c 的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。本文主要详细讲解下,如果在一个项目中维护和生成多个目标文件的生成,以及它们之间的依赖关系设置。项目源码官方文档target到底是什么?xmake的概念定义里,一个独立的项目工程可能会有多个子工程组织在一起,每个子工程对应只能生成一个唯...原创 2019-12-13 09:05:53 · 1307 阅读 · 0 评论 -
xmake从入门到精通9:交叉编译详解
xmake是一个基于Lua的轻量级现代化c/c 的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。除了win, linux, macOS平台,以及android, ios等移动端平台的内建构建支持,xmake也支持对各种其他工具链的交叉编译支持,本文我们将会详细介绍下如何使用xmake进行交叉编译。项目源码官方文档交叉编译工具链简介...原创 2019-12-08 21:00:31 · 2059 阅读 · 0 评论 -
跨平台c开发库tbox:内存库使用详解
TBOX是一个用c语言实现的跨平台开发库。针对各个平台,封装了统一的接口,简化了各类开发过程中常用操作,使你在开发过程中,更加关注实际应用的开发,而不是把时间浪费在琐碎的接口兼容性上面,并且充分利用了各个平台独有的一些特性进行优化。这个项目的目的,是为了使C开发更加的简单高效。源码仓库:https://github.com/tboox/tbox在线文档:https://tboox.io/#/...原创 2019-12-06 11:43:15 · 1984 阅读 · 0 评论 -
xmake从入门到精通8:切换编译模式
xmake是一个基于Lua的轻量级现代化c/c 的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。本文我们会详细介绍下如何在项目构建过程中切换debug/release等常用构建模式,以及自定义其他编译模式。项目源码官方文档调试和发布模式通常,如果我们是通过xmake create命令创建的项目,会在xmake.lua里面自动添加...原创 2019-12-06 09:31:07 · 1279 阅读 · 0 评论 -
tbox新增stackless协程支持
tbox之前提供的stackfull协程库,虽然切换效率已经非常高了,但是由于每个协程都需要维护一个独立的堆栈, 内存空间利用率不是很高,在并发量非常大的时候,内存使用量会相当大。之前考虑过采用stacksegment方式进行内存优化,实现动态增涨,但是这样对性能还是有一定的影响,暂时不去考虑了。最近参考了下boost和protothreads的stackless协程实现,这种方式虽然易用性和灵活转载 2016-12-07 15:10:23 · 1273 阅读 · 0 评论 -
聊聊原子操作那些事
原子操作,线程间交互数据最细粒度的同步操作,它可以保证线程间读写某个数值的原子性。由于不需要加重量级的互斥锁进行同步,因此非常轻量,而且也不需要在内核间来回切换调度,效率是非常高的。。那如何使用原子操作了,各个平台下都有相关api提供了支持,并且向gcc、clang这些编译器,也提供了编译器级的__builtin接口进行支持windows的Interlockedxxx和Interlockedxxx转载 2016-11-17 16:07:14 · 1617 阅读 · 0 评论 -
线程局部存储tls的使用
线程局部存储(Thread Local Storage,TLS)主要用于在多线程中,存储和维护一些线程相关的数据,存储的数据会被关联到当前线程中去,并不需要锁来维护。。因此也没有多线程间资源竞争问题,那如何去实现TLS存储呢,主要有以下几种方式:gcc和clang的__thread修饰符windows下msvc的__declspec(thread)修饰符pthread库pthread_sets转载 2016-11-17 16:04:41 · 1376 阅读 · 0 评论 -
协程分析之context上下文切换
协程现在已经不是个新东西了,很多语言都提供了原生支持,也有很多开源的库也提供了协程支持。最近为了要给tbox增加协程,特地研究了下各大开源协程库的实现,例如:libtask, libmill, boost, libco, libgo等等。他们都属于stackfull协程,每个协程有完整的私有堆栈,里面的核心就是上下文切换(context),而stackless的协程,比较出名的有protothrea转载 2016-11-17 16:01:24 · 14436 阅读 · 0 评论 -
tbox协程使用之切换与等待
tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持。目前提供下面一些功能特性:1. 提供yield切换调度支持,这个是必须的哈2. 提供suspend(挂起)/resume(恢复)协程接口,不同于yield的是,被suspend后,如果不显示调用resume恢复它,是永远不会被调度到的3. 提供sle转载 2016-11-17 15:59:45 · 1981 阅读 · 0 评论 -
记boost协程切换bug发现和分析
在分析了各大开源协程库实现后,最终选择参考boost.context的汇编实现,来写tbox的切换内核。在这过程中,我对boost各个架构平台下的context切换,都进行了分析和测试。在macosx i386和mips平台上实现协程切换时,发现boost那套汇编实现是有问题的,如果放到tbox切换demo上运行,会直接挂掉。在分析这两个架构上,boost.context切换实现问题,这边先贴下tb转载 2016-11-17 15:55:55 · 2697 阅读 · 0 评论