原创 與世界分享我剛編的mysql http隧道工具-hersql原理與使用

原文地址:https://blog.fanscore.cn/a/53/ 1. 前言 本文是與世界分享我剛編的轉發ntunnel_mysql.php的工具的後續,之前的實現有些拉胯,這次重構了下。需求背景是爲了在本地macbook上通過開源的

原创 redis georadius源碼分析與性能優化

原文地址: https://blog.fanscore.cn/a/51/ 背景 最近接到一個需求,開發中使用了redis georadius命令取附近給定距離內的點。完工後對服務進行壓測後發現georadius的性能比預期要差,因此我分析了

原创 [APUE]進程控制(下)

一、更改用戶ID和組ID   可以用setuid設置實際用戶ID和有效用戶ID。可以用setgid函數設置實際組ID和有效組ID。 #include <sys/types.h> #include <unistd.h> int setuid(

原创 [APUE]進程關係(下)

一、控制終端   對話期和進程組有一些其他特性: 一個對話期可以有一個單獨的控制終端。通常是我們在其上登錄的終端設備或僞終端設備。 建立與控制終端連接的對話期首進程,被稱之爲控制進程 一個對話期中的幾個進程組可以被分成一個前臺進程組以及一

原创 [APUE]進程關係(上)

一、終端登錄 1. 4.3+BSD終端登錄   系統管理員創建一個通常名爲/etc/ttys的文件,其中,每個終端設備有一行,每一行說明設備名和傳到getty程序的參數,這些參數說明了終端的波特率。當系統bootstrap時內核創建進程ID

原创 終端IO(上)

一、綜述   終端IO有兩種不同的工作方式: 規範方式輸入處理。在這種方式中,終端輸入以行爲單位進行處理。對於每個讀要求,終端驅動程序最多返回一行。 非規範方式輸入處理。輸入字符不以行爲單位進行裝配   如果不做特殊處理,則默認方式是規

原创 深入理解原子操作的本質

原文地址:https://blog.fanscore.cn/p/34/ 引言 本文以go1.14 darwin/amd64中的原子操作爲例,探究原子操作的彙編實現,引出LOCK指令前綴、可見性、MESI協議、Store Buffer、Inv

原创 golang unsafe.Pointer與uintptr

原文地址:https://blog.fanscore.cn/p/33/ 先說結論 uintptr 是一個地址數值,它不是指針,與地址上的對象沒有引用關係,垃圾回收器不會因爲有一個uintptr類型的值指向某對象而不回收該對象。 unsaf

原创 x64架構下Linux系統函數調用

原文鏈接:https://blog.fanscore.cn/p/27/ 一、 函數調用相關指令 關於棧可以看下我之前的這篇文章x86 CPU與IA-32架構 在開始函數調用約定之前我們需要先了解一下幾個相關的指令 1.1 push pu

原创 IEEE754標準浮點數表示與舍入

原文地址:https://blog.fanscore.cn/p/26/ 友情提示:本文排版不太好,但內容簡單,請耐心觀看,總會搞懂的。 1. 定點數 對於一個無符號二進制小數,例如101.111,如果我們要用2個字節即16位來存儲它,我

原创 理解內存對齊

原文地址: https://blog.fanscore.cn/p/24/ 相信大家都聽說過內存對齊的概念,不過這裏還是通過一個現象來引出本篇話題。 一、求一個結構體的size 猜下下面這個結構體會佔用多少字節 type S struct {

原创 PHP實現Bitmap的探索 - GMP擴展使用

原文地址:https://blog.fanscore.cn/p/22/ 一、背景 公司當前有一個用戶羣的系統,核心功能是根據不同的條件組去不同的業務線中get符合條件的uid列表,然後存到redis中的bitmap中。 舉個🌰,如果一個用

原创 基於EBNF語法的描述

基於JavaCC的語法描述 使用JavaCC從token序列中識別出"語句" “表達式” “函數調用” 等語法單位的方法。 只要爲JavaCC描述“語句” “表達式” “函數調用” 這樣的語法單位各自是由怎樣的token序列構成的,就能夠對

原创 Golang 筆記 5 go語句

   Go語句和通道類型是Go語言的併發編程理念的最終體現。與defer語句相同,go語句也可以攜帶一個表達式語句。Go語句的執行會很快結束,並不會對當前流程的進行造成阻塞或明顯的延遲。一個簡單的示例: go fmt.Println("Go

原创 JavaCC從入門到出門

一、JavaCC   JavaCC是java的compiler compiler。JavaCC是LL解析器生成器,可處理的語法範圍比較狹窄,但支持無限長的token超前掃描。   安裝過程:   我是從github上down下來的zip壓縮