多執行緒程式的效能隱形殺手 - False sharing

多執行緒碰上多核心

由於現在的CPU都是多核心,為了充份利用CPU的運算能力,開發多執行緒的程式就成為一件很合理的事情,而且.Net framework在4.0開始對平行運算提供了愈來愈完整的支援,開發多執行緒的程式跑在多核心的主機這件事,也變的愈來愈簡單。

但在某些場景,使用多執行緒運算並不見得會提昇運算效率,不正確的使用多執行緒運算甚至會拖慢系統效能。

「點我閱讀更多」

Disruptor.Net - IEventTranslator

IEventTranslator

IEventTranslator是在第3版發布的新功能,這篇文章是介紹使用的方式及設計理念

生產者發送事件到RingBuffer

事件驅動的一個特性就是透過發送事件給關注的訂閱者,進而讓多個不同的業務邏輯得以實現,以Disruptor的設計,就是要透過RingBuffer.Publish()這個方法把事件放入RingBuffer,後面的EventHandler則會依據其掛載的順序,由SequenceBarrier調度執行。

「點我閱讀更多」

Redis系列 - C#存取Redis (中)

C#存取Redis

延續上一篇Redis系列 - C#存取Redis (上),這篇文章會說明Redis的簡易Publish/Subscribe、Lua script的基礎知識。

PUBLISH/SUBSCRIBE

Redis的PUB/SUB是很簡易的訊息機制,並不像一些專門的Message Middleware(例如RabbitMQ、ActiveMQ)提供很多豐富的功能,比如它就不保證訊息發送後一定不會遺失,但因為附帶的這個功能實在太方便了,實務上還是經常使用到。

「點我閱讀更多」

Redis系列 - C#存取Redis (上)

C#存取Redis

這篇算是Redis系列第二篇,內容會儘量涵蓋存取Redis需要注意的一些基本知識及除錯

Redis的特性

在Redis系列第一篇有提到Redis是一個效能極好且穩定性很高的In-Memory的NoSQL database,它有幾個特性是我們需要知道的:

  • 以ANSI C開發,穩定
  • 資料儲存在Memory中處理,減少了Disk I/O
  • Single Thread I/O Multiplex
  • 提供AOF/RDB 2種持久化方式
「點我閱讀更多」

如何開始架構設計

需求決定架構

一開始就直接破題了,軟體架構不是看著國內外大神分享的架構簡報抄一遍就好,也不是完全靠經驗決定架構怎麼設計。

所有的架構設計都是由需求決定,我指的需求不單單指需求規格書上的功能性需求(Funtional Requirements),還包括了很容易被忽視的非功能性需求(Non-Functional Requirements)約束(Constraints)

「點我閱讀更多」

Redis系列 - 環境建置篇

Redis系列 - 環境建置篇

這篇會是Redis系列文的第一篇,著重在建立環境的基本知識。

基本介紹

以官方的解釋,Redis是一套Open source的In-memory NoSQL database,可以應用在Cache、Database及簡單的Message broker。

作者則說它是一個Data Structures Server,顧名思義,它提供了很多種資料結構及相對應的指令去操作這些資料。由於它是以In-Memory的方式為主,另一個很明顯的特性就是它很快,非常快,正確使用下可以輕鬆的處理每秒上萬的請求。

由於它具備極高的效能與可靠性,在很多系統中都會看到它的身影,對Backend/Fullstack engineer來說,這已經是必備的技能之一。

「點我閱讀更多」