2022/8/8

Golang

  •  與java比較

  • GMP模型 官方
  • GMP模型  來源 
    • G:Goroutine,实际上我们每次调用 go func 就是生成了一个 G。没有数量限制。但会受内存限制(Goroutine 创建需申请 2-4k 连续内存块)
    • P:Processor,处理器,一般 P 的数量就是处理器的核数,可以通过 GOMAXPROCS 进行修改。 本地隊列存放G
    • M:Machine,系统线程。默认数量限制是 10000
    • 流程: 
      • 1. 调用 go func()创建一个goroutine;

        2. 新创建的G优先保存在P的本地队列中,如果P的本地队列已经满了就会保存在全局的队列中;

        3. M需要在P的本地队列弹出一个可执行的G,如果P的本地队列为空,则先会去全局队列中获取G,如果全局队列也为空则去其他P中偷取G放到自己的P中

        4. G将相关参数传输给M,为M执行G做准备

        5. 当M执行某一个G时候如果发生了系统调用产生导致M会阻塞,如果当前P队列中有一些G,runtime会将线程M和P分离,然后再获取空闲的线程或创建一个新的内核级的线程来服务于这个P,阻塞调用完成后G被销毁将值返回;

        6. 销毁G,将执行结果返回

        7. 当M系统调用结束时候,这个M会尝试获取一个空闲的P执行,如果获取不到P,那么这个线程M变成休眠状态, 加入到空闲线程中



  •     GM模型(舊)與GMP模型(新)   來源
    • GM缺點
      • 调度 : 获取G全局队列锁,形成了激烈的競争
      • 轉移 : P0執行G0生成G1 , 為了繼續執行G0需要轉移給P1執行 , 但G0和G1又共享資料
    • GPM:
      • 調度 : 因為多了P的本地隊列, 減少鎖競爭
      • 轉移 : P0執行G0生成G1 , G1优先存放到P0的本地队列中,如果队列满了,则会把P0队列中一半的G移动到全局队列
        • 如果P的本地队列为空,那么他会先到全局队列中获取G,如果全局队列中也没有G,则会尝试从其他线程绑定的P中偷取(steal)一半的G

  • 效能調教工具 pyroscope
    • wget https://dl.pyroscope.io/release/pyroscope-0.31.0-linux-amd64.tar.gz
    • tar -zxvf pyroscope-0.31.0-linux-amd64.tar.gz
    • "github.com/pyroscope-io/pyroscope/pkg/agent/profiler"
    • profiler.Start(profiler.Config{
    •    ApplicationName: "name",
    •    ServerAddress:   "address",
    • })
    • /tmp/pyroscope  adhoc go run main.go
  • 效能調教工具 pprof
    • main.go
      • _ "net/http/pprof"
      • gorace()
      • func gorace() {
      •    c := make(chan bool)
      •    m := make(map[string]string)
      •    go func() {
      •       m["1"] = "a" // First conflicting access.
      •       c <- true
      •    }()
      •    m["2"] = "b" // Second conflicting access.
      •    <-c
      •    for k, v := range m {
      •       fmt.Println(k, v)
      •    }
      •    http.ListenAndServe("localhost:6060", nil)
      • }
    • 所有效能資訊
      • http://localhost:6060/debug/pprof/
    • cpu報告
      • go tool pprof http://localhost:6060/debug/pprof/profile
    • heap報告
      • go tool pprof http://localhost:6060/debug/pprof/heap 
    • cli模式
      • top10 前10名
      • list [method] 查看method
      • pdf 匯出pdf
    • flat : func執行所需heap或cpu時間(不包含內部func所需時間)
    • cum :  func所有所需heap或cpu時間
    • online分析報告
      • go tool pprof -http=:8080 C:\Users\david\pprof\pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.003.pb.gz

2022/8/7

乙太鏈

  • 乙太鏈 2.0 升級
    • 為何升級
      • 1.0 採用POW , 遇到交易堵塞, 手續費高...等問題
      • 2.0 採用POS , 分片技術 (64個分片 , 每分片1秒15個交易) , 預計要到2024年完成
    • 合併
      • 執行層面 execution layer
        • 智能合約
        • DApps 
      • 共識層面 Consuensus layer
        • 2020/12/01 已有一個 POS機制的Beacon chain , 將於2022/09使用
    • 升級優點
      • 交易速度增加
      • 交易費降低
    • 升級缺點
      • 分片過程的風險
      • DApps的風險
      • 安全性的風險
  • EIP 提案
    • 介紹 https://github.com/ethereum/EIPs
    • 所有提案列表 https://eips.ethereum.org/all
    • 提案狀態
  • ERC 智能合約
    • 所有介面標準 https://eips.ethereum.org/erc

2022/8/2

比特幣

  •  背景
    • 作者 : 中本聰 (未公開長相 ,已消失於網路上)
    • 比特幣曾經歷過多次分叉
      • 如硬分叉 > 比特幣現金BCH
  • 帳戶模型: utxo-based model
  • 3 種比特幣核心地址格式:

    • P2PKH (pay to pubkey hash)

      • 1開頭

      • non Segwit

    • P2SH (pay to Segregated hash)

      • 3開頭

      • BIP13

      • Segwit

    • bech32

      • bc1開頭

      • Segwit

  • github主流項目
    • Bitcoin Core
      • 中本聰發起 , C++語言
      • 官網 https://bitcoin.org
      • 節點 https://bitcoin.org/en/full-node
      • RPC DOC https://developer.bitcoin.org/reference/rpc/index.html
    • Bitcore Node 

      • bitpay發起 , javascript語言
    • Btcd ,
      • btcsuite發起 , golang語言
  • 配置 bitcoin.conf
    • 產生器 : https://jlopp.github.io/bitcoin-core-config-generator/#config=eyJfX2ludGVybmFsIjp7InBsYXRmb3JtIjoiTGludXgifX0=
    • 介紹 : https://en.bitcoin.it/wiki/Running_Bitcoin
  • 手續費計算
    • https://bitcoinops.org/en/tools/calc-size/
  • 字節說明
    • https://en.bitcoin.it/wiki/Script
  • test net scan
    • https://www.blockchain.com/explorer?view=btc-testnet
  • main net scan
    • https://www.blockchain.com/explorer?view=btc
  • RPC URL 說明
    • https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)
  • BIP   Bitcoin Improvement Proposals
    • https://ithelp.ithome.com.tw/articles/10279944
    • 開發者向比特幣社群提出比特幣Bitcoin 新功能或改進建議的技術設計文件
      • 目前所有BIP提案內容 https://github.com/bitcoin/bips
    • 地址產生器Mnemonic Code Converter
      • https://iancoleman.io/bip39/
    • BIP 32 : 定義 Hierarchical Deterministic wallet (簡稱 “HD Wallet”),是一個系統可以從單一個 seed 產生一樹狀結構儲存多組 keypairs(私鑰和公鑰)
      • https://ithelp.ithome.com.tw/articles/10279944
    • BIP 39 : 將 seed 用方便記憶和書寫的單字表示。一般由 12 個單字組成,稱為 mnemonic code(phrase),中文稱為助記詞或助記碼。
      • https://ithelp.ithome.com.tw/articles/10280092
    • BIP 44: 基於 BIP32 的系統,賦予樹狀結構中的各層特殊的意義。讓同一個 seed 可以支援多幣種、多帳戶等。
      • 第一個 m代表的是master node。
      • 第二個 purpose固定是44,代表使用BIP44所規範的路徑。
      • 第三個 coin_type提供不同加密貨幣的區隔,每個貨幣都有一個編號,
        BTC是0、ETH是60,這裡有所有已登記的幣的編號。
      • 第四個 account提供不同用途的帳戶。
      • 第五個 change分成兩個,0是外部鏈(對外公開)可用來收錢,1是內部鏈(對外不公開)用來找零。
      • 第六個 即是你的地址編號,從0開始逐一遞增。




test2