最新 | 最热门 | 最高评价

+0  C++ Latch 实现

Tag: C/C++语言编程
ideawu 发于 2021年08月26日 21:10 | 点击: 1976 | 展开摘要
Latch(Binary Semaphore) 不同于信号量(Counting Semaphore), 也不同于条件变量, 它是一种合并信号成一个标记的通信方式, 可用于实现 Batch 操作. 例如, 两个线程围绕一个标记, 一个设置(生产者), 一个复位(消费者). 如果标记已设置, 则消费者立即复位然后返回. 如果标记未设置, 则消费者等待标记被设置.

在生产者消费者编程模式中, 生产者产生任务, 任务被加入队列中, 同时通过 Latch 告知消费者. 使用 Latc

查看全文: http://www.udpwork.com/item/18110.html

+0  并发编程的核心技术 – 多版本(Multi Version)

Tag: C/C++语言编程 | Computer System | 分布式 | 数据库 | 算法
ideawu 发于 2021年04月17日 18:20 | 点击: 515 | 展开摘要
在单机编程时代, 每一项数据只有唯一的一份, 对数据的修改也是 in-place 的. 但是, 在并发编程领域, 包括分布式系统, 数据多版本(Multi Version, Versioning)是核心.

我们先从单机编程的内存操作出发. 对于内存的操作, 都是原地(in-place)更新的. 对象和内存空间强绑定, 当更新对象时, 是将对象的内存空间擦除然后用新数据写覆盖. 到了多线程编程时代, 就引入了锁机制, 因为擦除和写操作过程不是原子性的, 可能擦除到一半时, 就

查看全文: http://www.udpwork.com/item/17461.html

+0  Go 编程模式:k8s Visitor 模式

Tag: Go 语言 | 程序设计 | 编程语言 | design pattern | Go | golang | Kubernetes | Visitor Pattern
陈皓 发于 2020年12月26日 19:25 | 点击: 696 | 展开摘要
本篇文章主要想讨论一下,Kubernetes 的 kubectl 命令中的使用到到的一个编程模式 – Visitor(注:其实,kubectl 主要使用到了两个一个是Builder,另一个是Visitor)。本来,Visitor 是面向对象设计模英中一个很重要的设计模款(参看Wikipedia Visitor Pattern词条),这个模式是一种将算法与操作对象的结构分离的一种方法。这种分离的实际结果是能够在不修改结构的情况下向现有对象结构添加新操作,是遵循开放/

查看全文: http://www.udpwork.com/item/17487.html

+0  Go编程模式:Pipeline

Tag: Go 语言 | 程序设计 | 编程语言 | channel | Go | golang | pipeline
陈皓 发于 2020年12月26日 17:04 | 点击: 720 | 展开摘要
本篇文章,我们着重介绍Go编程中的Pipeline模式。对于Pipeline用过Unix/Linux命令行的人都不会陌生,他是一种把各种命令拼接起来完成一个更强功能的技术方法。在今天,流式处理,函数式编程,以及应用网关对微服务进行简单的API编排,其实都是受pipeline这种技术方式的影响,Pipeline这种技术在可以很容易的把代码按单一职责的原则拆分成多个高内聚低耦合的小模块,然后可以很方便地拼装起来去完成比较复杂的功能。

本文是全系列中第8 / 9篇:Go编程模式

查看全文: http://www.udpwork.com/item/17488.html

+0  Go编程模式:委托和反转控制

Tag: Go 语言 | 程序设计 | 编程语言 | Go | golang | IoC
陈皓 发于 2020年12月26日 16:57 | 点击: 657 | 展开摘要
图片来源:GopherSource
反转控制IoC – Inversion of Control 是一种软件设计的方法,其主要的思想是把控制逻辑与业务逻辑分享,不要在业务逻辑里写控制逻辑,这样会让控制逻辑依赖于业务逻辑,而是反过来,让业务逻辑依赖控制逻辑。在《IoC/DIP其实是一种管理思想》中的那个开关和电灯的示例一样,开关是控制逻辑,电器是业务逻辑,不要在电器中实现开关,而是把开关抽象成一种协议,让电器都依赖之。这样的编程方式可以有效的降低程序复杂度,并提升代

查看全文: http://www.udpwork.com/item/17489.html

+0  Go 编程模式:Go Generation

Tag: Go 语言 | 程序设计 | 编程语言 | Go | golang | Template
陈皓 发于 2020年12月25日 17:06 | 点击: 703 | 展开摘要
图片来源:GopherSource
在本篇文章中,我们将要学习一下Go语言的代码生成的玩法。Go语言代码生成主要还是用来解决编程泛型的问题,泛型编程主要解决的问题是因为静态类型语言有类型,所以,相关的算法或是对数据处理的程序会因为类型不同而需要复制一份,这样导致数据类型和算法功能耦合的问题。泛型编程可以解决这样的问题,就是说,在写代码的时候,不用关心处理数据的类型,只需要关心相当处理逻辑。泛型编程是静态语言中非常非常重要的特征,如果没有泛型,我们很难做到多态,也很难完成抽象,

查看全文: http://www.udpwork.com/item/17490.html

+0  Go编程模式:Map-Reduce

Tag: Go 语言 | 程序设计 | 编程语言 | functional | functional-programming | Go | golang | MapReduce | 函数式 | 函数式编程
陈皓 发于 2020年12月24日 15:13 | 点击: 678 | 展开摘要
在本篇文章中,我们学习一下函数式编程的中非常重要的Map、Reduce、Filter的三种操作,这三种操作可以让我们非常方便灵活地进行一些数据处理——我们的程序中大多数情况下都是在到倒腾数据,尤其对于一些需要统计的业务场景,Map/Reduce/Filter是非常通用的玩法。下面先来看几个例子:

本文是全系列中第5 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go 编程模式:错误处理
Go 编程模式:Functional Options
Go编程模式:委托

查看全文: http://www.udpwork.com/item/17491.html

+0  Go 编程模式:Functional Options

Tag: Go 语言 | 程序设计 | 编程语言 | functional | functional-programming | Go | golang | Pattern | 函数式编程
陈皓 发于 2020年12月22日 23:23 | 点击: 624 | 展开摘要
在本篇文章中,我们来讨论一下Functional Options这个编程模式。这是一个函数式编程的应用案例,编程技巧也很好,是目前在Go语言中最流行的一种编程模式。但是,在我们正式讨论这个模式之前,我们需要先来看看要解决什么样的问题。

本文是全系列中第3 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go 编程模式:错误处理
Go 编程模式:Functional Options
Go编程模式:委托和反转控制
Go编程模式:Map-Reduce
Go 编程模式

查看全文: http://www.udpwork.com/item/17492.html

+0  Go 编程模式:错误处理

Tag: Go 语言 | 程序设计 | 编程语言 | Error | Go | golang
陈皓 发于 2020年12月22日 18:19 | 点击: 561 | 展开摘要
错误处理一直以一是编程必需要面对的问题,错误处理如果做的好的话,代码的稳定性会很好。不同的语言有不同的出现处理的方式。Go语言也一样,在本篇文章中,我们来讨论一下Go语言的出错出处,尤其是那令人抓狂的 if err != nil 。

在正式讨论Go代码里满屏的 if err != nil 怎么办这个事之前,我想先说一说编程中的错误处理。这样可以让大家在更高的层面理解编程中的错误处理。

本文是全系列中第2 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go

查看全文: http://www.udpwork.com/item/17493.html

+0  Go编程模式:切片,接口,时间和性能

Tag: Go 语言 | 程序设计 | 编程语言 | Go | golang
陈皓 发于 2020年12月18日 15:36 | 点击: 657 | 展开摘要
在本篇文章中,我会对Go语言编程模式的一些基本技术和要点,这样可以让你更容易掌握Go语言编程。其中,主要包括,数组切片的一些小坑,还有接口编程,以及时间和程序运行性能相关的话题。

本文是全系列中第1 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go 编程模式:错误处理
Go 编程模式:Functional Options
Go编程模式:委托和反转控制
Go编程模式:Map-Reduce
Go 编程模式:Go Generation
Go编程模式:修饰器
Go

查看全文: http://www.udpwork.com/item/17494.html

+0  粒子管理器的 C++ 封装

Tag: ECS | 游戏开发 | 语言与设计
云风 发于 2020年11月27日 23:09 | 点击: 440 | 展开摘要
这篇接着上一篇 粒子系统的设计。

TL;DR 在花了一整个晚上用 C++ 完成了这一块的功能后,我陷入了自我怀疑中。到底花这么多精力做这么一小块功能有意义么?强调类型安全无非是为了减少与之关联的代码的缺陷,提高质量;但代码不那么浅显易懂却降低了质量。

我们用 C 实现了一个基于 ECS 结构的粒子系统的管理器,代码 psystem_manager.h 在这里。

先来回顾一下设计:在这个粒子系统中,我期望把粒子对象的不同属性分开管理。

即:传统的面向对象的数据结构中,一

查看全文: http://www.udpwork.com/item/17520.html

+0  粒子系统的设计

Tag: ECS | 语言与设计
云风 发于 2020年11月20日 16:28 | 点击: 384 | 展开摘要
这几天在重构引擎中的粒子系统。之前用 lua 做了个原型,这次用 C/C++ 重新实现一次。目前还是基于 CPU 的粒子系统,今后有必要再实现基于 GPU 的版本。

去年写过一篇 blog 也是谈粒子系统的 。 思路大致类似,但这次在数据结构的细节上做了一些专门的设计,有觉得还有点意思,值得写写。

首先,粒子对象本身就是一个集合了多种数据的数据块。我限制了同时最多 64K 个粒子片,这些粒子对象可以放在一块连续内存中,并且可以用 16bit 的 id 进行索引。

当粒子

查看全文: http://www.udpwork.com/item/17521.html
|<<<1234567>>>| 一共35页, 409条记录