雜談20190505
原本寫在部落格的 圖比較少就直接搬運一下~
本來說是每個月至少寫一篇的,似乎上個月不小心直接鴿了...
有一些想寫的東西,比如之前看到blazor
或者LiveView
,寫點前後端渲染相關的,但又感覺自己的知識面過於狹窄,內容不夠全不說可能還會寫錯誤導別人所以作罷.甚至還想寫瓶頸優化類的,但自己寫的程式碼那麼屎都沒自覺還寫文說怎麼優化... ...
就雜聊一些近況吧.
(說到blazor
,這東西改名真夠頻繁的,最開始是一個實驗性質專案,之後吸收到 .NET Core 3.最開始是blazor,服務端渲染是razor component,在某一次改動後變成了整個叫razor component,blazor是client hosting model,最近因為概念理解起來會造成障礙又改回了第一個....真的是夠折騰的)
最近在(重新)看elixir
,上一次似乎是4年多快5年前了,過了這麼多年,elixir
的流行程式依舊那樣,看來是火不了了:(,適合做中介軟體的語言,結果始終沒有火起來,然而新興的Rust
和Go
已經在攻城略地.
這充分說明語言的流行與否與語言本身優秀與否可能關係不大(舉個不恰當的例子,java
和C#
在國內的流行程度),而與宣發和大廠背書可能關係大一點.
更悲慘的是erlang
了,在流行度上面.
說到這個,上個月erlang
之父 Joe Armstrong過世了,非常突然,畢竟前幾天還看到在推上和人聊硬體程式設計相關的事,還有之前的阿怪,一些熟悉的人名不經意間就已經不在了.
說到elixir
有一些感悟,詳細的實現還沒看,基本也是看一些說明性質的東西.
因為本身就是基於BEAM
的,所以天然獲得了搶佔式的process排程,這點和協作式的協程有很大不同,基於yield主動放棄控制權轉移給其他人的協程 vs 每個process有固定的時間片,各有利弊.
但這一切也都是基於系統執行緒上的,所以遇到的問題也是類似,遇上阻塞的系統呼叫怎麼辦.
elixir
(BEAM)這邊的話還是老套路用IO執行緒池,排程器發現阻塞呼叫時會把阻塞的任務丟給執行緒池,把當前process掛起,讓對應的執行緒去執行其他process,這點和Go
的思想是類似的(但Go
的做法是將當前P的goroutine交給其他的P).
這些本質上其實都是一些魔法.
便於編寫程式碼的魔法.
回到java的世界,沒有這樣的執行時,沒有這樣的發現阻塞呼叫的機制.這些操作都是手動做的,把阻塞的IO扔到IO執行緒池做非同步化自己寫回撥,實現的東西是類似的,不過因為是要手寫,所以程式碼的好壞取決於人,又因為是協作的,所以java在少糖少魔法的情況下,程式碼的質量水平可能會相對堪憂.
語法糖和各種魔法還是很重要的.在工程角度上.
上面說到Go
,想起了群裡討論的時候M P G裡的P被說成了核,但是一臉矇蔽,M已經是系統執行緒了,M應該是接近排程器之類的東西吧,M下掛個核是什麼意思? 後來找了下原文,發現原來是個類比... ...
A P can be thought of like a CPU in the OS scheduler and the contents of the p type like per-CPU state.
一些翻譯不走心然後各種引用就這麼傳下來了...
基礎概念不也是這樣嗎,感覺自己年少無知的一些概念完全是錯的,最近也是打自己臉打得疼,這些概念可能不直接影響寫的程式碼,但是影響看事的廣度和深度.比如把AIO和多執行緒繫結,覺得使用AIO會造成執行緒數增多,上下文開銷增加,但首先使用IOCP這種和執行緒無關的實現不會增加多少執行緒,其次,IO執行緒池的執行緒主要被阻塞並不會有執行CPU密集任務那樣來的那麼大開銷,不過開多了記憶體佔用倒是會變多.(上述這些話不知道什麼時候又要打臉了)
差不多也到這樣.
本來想寫點工作之類的,但想想畢竟和公司相關,還是算了.工作這種每個人有自己感悟,每個人也參與其中,寫出來大抵也差不多,還是算了.
一些資料:
https://dotnet.microsoft.com/apps/aspnet/web-apps/client
https://shift.infinite.red/phoenix-liveview-round-up-the-story-so-far-3cbb1648e940
https://hackernoon.com/remembering-joe-a-quarter-of-a-century-of-inspiration-and-friendship-3ddded0831ab
https://github.com/golang/go/blob/master/src/runtime/HACKING.md
相關文章
- 退役雜談
- 2024.9.19雜談
- CodeReview雜談View
- node雜談
- [20190505]ts 命令在哪裡.txt
- 正則雜談
- 數學雜談 #??
- 免殺雜談
- 雜談其一
- 監控雜談
- 【雜談】策略模式模式
- 【雜談】Starter Template
- 一些雜感雜想(一)談談加班、團隊
- kubernetes雜談之(二)Pod初談
- 魔法使之夜 雜談
- 工作隨筆雜談
- 架構雜談《九》架構
- 架構雜談《八》架構
- 架構雜談《七》架構
- 架構雜談《六》架構
- 架構雜談《五》架構
- iOS APP安全雜談iOSAPP
- 資料分析雜談
- 設計模式雜談設計模式
- 架構雜談《二》架構
- 架構雜談《三》架構
- 架構雜談《四》架構
- token 的生成雜談
- 前端雜談:DOMevent原理前端
- 專案交接雜談
- 前端隨筆(雜談)前端
- DevOps - DevOps隨想雜談dev
- android開發技巧雜談Android
- 研發規範雜談
- 資料庫雜談(4)資料庫
- Feed 流系統雜談
- mysql學習方法雜談MySql
- 資料庫雜談(2)資料庫