Decorative image frame

喵耳朵

略懂算法 | 在学架构 | 梦想成为 | Top插画师

喵耳朵

架构小试之IDL

为什么IDL的介绍也放在这里呢?一方面是我想不到放哪里,另一方面是之前说到,“架构”即“设计”,那么IDL、RPC框架也算是设计的一部分。不合理的选型在后续维护上会带来不小的麻烦。

本文主要介绍我用过的一些IDL,并结合真实案例,分析他们的优劣。

Read More...

我所理解的架构

本来是打算写一篇介绍我目前工作中有意思的设计的博客,写着写着发现设计的知识点还是有点多的,因此这里单独增加一栏,用来不断的更新相关的内容。

由于工作的变化,我从图像算法和框架,转向了服务端架构。做服务端架构,相较于算法和sdk框架,有着挺大的区别。而适应这一变化,确实需要花费挺长的时间,也学习到很多。

服务端的概念很多,很难在一本书上找到所有的答案,平时也只能自己多问多摸索。

这里总结了一下日常遇到的有意思的概念和技巧,希望耐心看完本文的你能够更快速的理解服务端的概念和开发过程。不至于在入职时每次讨论都一脸懵逼。

另外,我会在各部分的章节中,插入一些工作中遇到的真实案例。事实上,由于这些案例太过有意思,让我忍不住分享出来,所以才有了本文。(本文的目录也是根据这些案例归纳出来的。)

Read More...

Redis数据结构与对象

本文主要是《Redis设计与实现》的第一部分的总结,内容为数据结构和对象。这里类比了C++ STL中的数据结构,便于理解。

Redis是使用C语言编写的,C语言本身没有复杂的数据结构。因此Redis自己实现了一套底层的数据结构,这些数据结构作为工具被Redis的其他模块使用。

Read More...

关于多线程的三两事

多线程一直是编程中的重要的工具,它可以分充分的利用硬件资源,是我们用更少的时间去完成更多的事情。在之前的博客中,我有介绍了OpenMP的基本使用,OpenMP可以理解为多线程的一个合理和高效的一套抽象工具。这次,打算仔细的介绍多线程编程中的常见的概念和典型的案例。

典型的案例

说到多线程,最核心的问题就是保证数据的读写安全。为了达到此目的,我们需要多很多常见的数据结构做一些改造,从而适应多线程的场景。以下是我工作中比较常见到的一些使用场景:

  1. 线程池
  2. 读写锁
  3. 消息队列
  4. ConcurrentCache
  5. PingPang Buffer

在具体介绍这些使用场景之前,我们还是需要了解需要使用到的一些基本的工具:互斥量、条件变量、原子操作等。

Read More...

C程序优雅地调用Lua?一篇博客带你全面了解lua_State

一、前言

Lua是一种使用十分方便的脚本语言,同时又能C/C++无缝的粘合在一起,在速度上也比很多其他的脚本语言快了一个数量级,在使用LuaJit的情况下,速度甚至可以与C语言比肩。同时Lua支持模块的热更新,在游戏等行业受到广泛的应用。

同时Lua虚拟机十分的轻量,在占用极少内存和依赖的情况下,可以方便的嵌入到我们的项目中。

本文中,主要介绍了在C/C++项目中,使用Lua虚拟机的技巧,着重介绍Lua_State的原理和使用。简单的说就是用C去调用Lua。另一个技术是用Lua调用C库,可以为Lua程序加速,这个在以后的文章中再介绍。

Read More...

Easy Pipeline,一种轻量级的Python Pipeline库

嗯,很久没有写博客了,最近的工作都是偏开发性质的,以至于没有时间对自己感兴趣的领域进行探索,感觉个人的成长停滞了一些。如何在枯燥的工作中,提取出有助于自己成长的养分,对于每个人来说都是不小的考验。

这次,带来的是之前编写的一下挺简单的库,用来简化流水线作业的小框架。

Github: https://github.com/miaoerduo/easy-pipeline 欢迎Star和提交MR。

Read More...