Re: [問卦] 精通數位邏輯對Coding有什麼幫助?

看板Gossiping作者 (松鼠)時間4年前 (2020/04/24 06:05), 4年前編輯推噓128(129152)
留言182則, 122人參與, 4年前最新討論串2/2 (看更多)
※ 引述《HankYang (密探X)》之銘言: : 餓死抬頭 : 不是說二進位、布林代數、邏輯閘等等那些超超超超基礎的東東 : 那些東東其他科目也會教 : 而是指正反器、循序邏輯電路、狀態機等等鬼東西 : 那些對Coding有什麼幫助呀嘻嘻嘻 : 有沒有八卦? 外頭雨勢好大,趁著等著雨勢減小才能吃早餐的空擋,嘗試簡單回覆。先講結論,網頁 伺服器背後的運作,跟數位邏輯有關,而且原始程式碼裡頭就寫了 (!) 原提問的推文下方,skaterboy13 提到: 「在這邊問這個做啥? 一堆裝懂的人 什麼都會說很基本」 的確,人人都可說「很基本」,但這樣的「基本」到底體現在何處呢?應是原發問者所 在意。我教計算機結構 [1],會對著學員說,數位邏輯很「基本」,畢竟現行的電腦即是 架構在一系列的組合邏輯電路之上。可是對於通用的程式設計有何幫助呢?特別是原發問 者所提的正反器 (Flip-flop, FF)、序向邏輯電路 (sequential logic circuit),及 狀態機等等「鬼東西」。或許這樣的質疑在不少人心裡都有,尤其抱持著「開發偉大的 程式」心態到了資訊工程系就讀的同學,發現電子電路、數位邏輯、微處理器等課程都是 必修,不免感嘆「踩到地雷」了。 「如果我們一定非要那鬼量子躍遷不可,那我後悔參與量子理論。」 -- 在愛因斯坦 等人發表題為「量子力學能完整地解釋實在性嗎?」的論文、反駁量子世界觀之後, 薛丁格提出「薛丁格的貓」(Schrodinger's cat) 的論文。 倘若量子力學是原子中的幽靈,那麼數位邏輯就是程式設計裡頭的幽靈 -- 是否能窺見、 是否「基本」,又能否給予你啟發,完全取決於你對於微觀世界的態度。 且讓我跳到開發高效率的網頁伺服器 (web server, 也稱 HTTP server 或 HTTP daemon, 後者的 "daemon" 原為惡魔之意,在 UNIX 的世界中引申爲常駐程式) 開發工作來討論, 再細談和數位邏輯的關聯。網頁伺服器這應該就符合原發問者對於程式設計的「程式」 標的物吧?但你有沒有想過,當你閱讀 NGINX [2] 一類高效率網頁伺服器的原始程式碼 時,會看到 Level-triggered 和 edge-triggered 等術語 -- 後兩者就是數位邏輯裡頭 正反器的術語,不是巧合,就是同個意思。 一時之間很難接受吧?以下摘錄自 NGINX Development guide [3]: > All such events operate in Edge-Triggered mode, meaning that they only > trigger notifications when the state of the socket changes. For example, > doing a partial read on a socket does not make nginx deliver a repeated read > notification until more data arrives on the socket. Even when the underlying > I/O notification mechanism is essentially Level-Triggered (poll, select etc), > nginx converts the notifications to Edge-Triggered. 這裡談及兩種工作模式: * Edge Triggered (ET, 邊緣觸發) _______________________ / (positive-edge trigger ___/ * Level Triggered (LT, 條件觸發) ____ (level trigger) | | ____| |____ ET 表示在狀態改變時才通知(例如: 在邊緣上從低電位到高電位),LT 表示在這個狀態 才通知(例如: 只要處於低電位就通知)。對應到上述的 NGINX 的網路通訊處理 (例如 socket),ET 指一旦有新資料就通知(狀態的改變),而 LT 是「只要有新資料」就會 持續通知,直到緩衝區的資料全數取出。 詳細的議題可參見 Linux 開發手冊關於 epoll [4] 的描述,我們不難發現,儘管網頁 伺服器是貨真價實的軟體,但裡頭術語和概念的展現,逃脫不了硬體給予隱喻和影響 (implication),我們學習數位邏輯就可強化對術語的認識,從而能夠和世界各地的高手 交流。 開發高效率的網頁伺服器免不了探討 I/O 事件模型,例如 blocking I/O vs. non-blocking I/O 和 synchronous I/O vs. asynchronous I/O,然後仔細觀察這些術語 和含義後,不難發現也都可對應到組合邏輯電路的概念,無論時序抑或訊號同步的議題。 再來是狀態機 (state machine)。由於在高效能伺服器開發中,我們引入 non-blocking I/O 後,整體程式開發的難度陡然上升,遇到到 blocking read 不曾遇到的問題:資料 可能分批送達,於是在通訊協定解析到一半時,read 就回傳 -1,所以我們必須將已讀到 的資料保存下來,並維護其狀態,以表示是否仍需要資料。例如解析 HTTP Request Header 時,讀到 GET /index.html HTT (注意:少一個 P) 就結束,在 blocking I/O 裡只要繼續 read 就可處理,但在 nonblocking I/O,我們必須維護這個狀態,下一次 必須讀到欠缺的 P 字元,否則 HTTP 通訊協定會遇上解析錯誤。為此,我們就需要維護 一套狀態機,對!就跟數位邏輯所探討的是同一個術語。 在「Linux 核心設計」課程 [5] 中,我們展示一個原始程式碼不到 C 語言一千行的小 程式,卻具備約有 NGINX 一半資料吞吐量的網頁伺服器 seHTTPd,恰好就是數位邏輯 概念在真實世界的應用案例,相關資訊可見: https://hackmd.io/@sysprog/fast-web-server 當然,這僅是起點,在課程中,我要求學員針對 Linux 系統特性和思索 web 情境去 探索更多更深刻的改進空間,而這一切,最佳化來自對系統的充分認知。引用羅輯思維 第 85 集: 費馬大定理 [6] 的結語: 「我們當中的絕大多數人,花了人生的十二年時光,六年小學,六年中學,被數學 摧殘,我們只知道數學是敲開大學校門的一個敲門磚,自打上了大學之後,這個 東西就被我們當做人生當中最痛苦的經驗,被刪除了。」 「人類知識領域智力領域的任何豐碑,從來都不是用強烈的目的性建造出來的,它的 每一塊磚,每一塊瓦,都是由興趣堆積出來的,興趣不僅導致了最後的成功,而且 點亮了其中的每一塊磚,每一塊瓦,每一個人的生命。」 在資訊工程 (或說電腦科學) 課程中,充斥著大量數學和電子硬體課程,其實就是上面 所提到的一磚一瓦,堆積著今日我們所見的數位世界的風情萬種。倘若我們一開始就戴著 有色眼鏡去駁斥這些科目的學習,是否限制了自已可能的寬敞發展呢? 喔,我又來打廣告,歡迎關注「Linux 核心設計」[5] 和 "Computer Architecture" [1] 這兩門課程,都有完整的線上教材可參考,也有練習題可讓學員隨時檢測自己所學。 [1] Computer Architecture http://wiki.csie.ncku.edu.tw/arch/schedule [2] NGINX: https://nginx.org/ 根據 W3Techs 的統計資料,世界上最繁忙的網站前一萬名裡頭 57% 採用 NGINX [3] NGINX Development guide https://nginx.org/en/docs/dev/development_guide.html [4] epoll - I/O event notification facility http://man7.org/linux/man-pages/man7/epoll.7.html [5] Linux 核心設計課程 http://wiki.csie.ncku.edu.tw/linux/schedule [6] 羅輯思維 85 集: 費馬大定理 影片: https://youtu.be/bHexlr4b_j8
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.246.163 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1587679534.A.FC6.html

04/24 06:07, 4年前 , 1F
又來 好文 推
04/24 06:07, 1F

04/24 06:08, 4年前 , 2F
前十
04/24 06:08, 2F

04/24 06:10, 4年前 , 3F
04/24 06:10, 3F
※ 編輯: jserv (140.116.246.163 臺灣), 04/24/2020 06:12:30

04/24 06:11, 4年前 , 4F
push
04/24 06:11, 4F

04/24 06:13, 4年前 , 5F
問個小問題 跑 PHP server 效能X86 ARM 真的會像有些 文
04/24 06:13, 5F

04/24 06:13, 4年前 , 6F
章說的 效能差到千倍嗎?
04/24 06:13, 6F

04/24 06:14, 4年前 , 7F
@Behind4, Arm 伺服器的調教很繁瑣,若沒有特別調整,效能
04/24 06:14, 7F

04/24 06:14, 4年前 , 8F
的確會是問題。不過這件事在 AWS 的 Arm 伺服器陸續有解法
04/24 06:14, 8F

04/24 06:14, 4年前 , 9F
只是對應 a,b <-> 0,1 <-> 高,低
04/24 06:14, 9F

04/24 06:15, 4年前 , 10F
老師不要這樣,你上一篇我還沒看完,我想下課
04/24 06:15, 10F

04/24 06:15, 4年前 , 11F
推推
04/24 06:15, 11F

04/24 06:16, 4年前 , 12F
@SydLrio, 我只是等早餐店開門,順手發廢文,你不用認真
04/24 06:16, 12F

04/24 06:17, 4年前 , 13F
116哪間 蛤
04/24 06:17, 13F

04/24 06:18, 4年前 , 14F
@renna038766, 116 是台灣最好的學店,你有意見嗎?
04/24 06:18, 14F

04/24 06:19, 4年前 , 15F
你把118放哪 蛤
04/24 06:19, 15F

04/24 06:20, 4年前 , 16F
深深覺得,coding是智商高的人在玩的
04/24 06:20, 16F

04/24 06:21, 4年前 , 17F
光靠下苦功的話效率還是遠遠不及,大腦反應時間差太多
04/24 06:21, 17F

04/24 06:21, 4年前 , 18F
@wario2014, 所以更要多利用討論區交流,教學相長
04/24 06:21, 18F

04/24 06:21, 4年前 , 19F
神人快拜
04/24 06:21, 19F

04/24 06:25, 4年前 , 20F
推這篇
04/24 06:25, 20F

04/24 06:28, 4年前 , 21F
原來是Jserv,好,先跪下去再說
04/24 06:28, 21F

04/24 06:35, 4年前 , 22F
推推
04/24 06:35, 22F

04/24 06:36, 4年前 , 23F
Amazon Web Services這個?? 他用ARM架構的CPU? 為了節能
04/24 06:36, 23F

04/24 06:36, 4年前 , 24F
嗎?其實我本來要問的只是用手機架站的實用性XDDD
04/24 06:36, 24F

04/24 06:37, 4年前 , 25F
請收下我的膝蓋
04/24 06:37, 25F

04/24 06:37, 4年前 , 26F
@Behind4, 請查詢 AWS Graviton2 處理器
04/24 06:37, 26F

04/24 06:38, 4年前 , 27F
coding 應該不用那麼嚴肅吧 =__= 這應該是件好玩的事
04/24 06:38, 27F

04/24 06:38, 4年前 , 28F
謝謝
04/24 06:38, 28F

04/24 06:39, 4年前 , 29F
@Behind4, 手機裡頭執行網頁伺服器的案例不算少,不過...
04/24 06:39, 29F

04/24 06:39, 4年前 , 30F
04/24 06:39, 30F

04/24 06:40, 4年前 , 31F
有時候是手機製造商或晶片設計商提供的「後門」(但我不能說
04/24 06:40, 31F

04/24 06:41, 4年前 , 32F
連名字都是 有多熱愛啊
04/24 06:41, 32F

04/24 06:43, 4年前 , 33F
@riker729, 小時聽到「人生以服務為目的」,長大就開發
04/24 06:43, 33F

04/24 06:43, 4年前 , 34F
server 了 (咦?)
04/24 06:43, 34F

04/24 06:46, 4年前 , 35F
這兩年寫設備的web 深深覺得太混亂了 還得考慮相容性
04/24 06:46, 35F

04/24 06:46, 4年前 , 36F
好猛的等早餐廢文
04/24 06:46, 36F

04/24 06:47, 4年前 , 37F
簡單來說都不用懂,那些問題kernel都解決了
04/24 06:47, 37F

04/24 06:48, 4年前 , 38F
這些東西老早在posix裡面都有東西包起來了
04/24 06:48, 38F
還有 104 則推文
還有 1 段內文
04/24 10:45, 4年前 , 143F
04/24 10:45, 143F

04/24 10:46, 4年前 , 144F
你說的我完全不懂,肯定是高高在上天上人
04/24 10:46, 144F

04/24 10:55, 4年前 , 145F
推!
04/24 10:55, 145F

04/24 11:02, 4年前 , 146F
edge/level trigger那個不用懂數位邏輯,當成純名詞定義
04/24 11:02, 146F

04/24 11:02, 4年前 , 147F
也很好理解吧
04/24 11:02, 147F

04/24 11:03, 4年前 , 148F
先推再慢慢啃內文
04/24 11:03, 148F

04/24 11:05, 4年前 , 149F
@vvrr, 那就會陷入背誦名詞,而不知曉術語的由來
04/24 11:05, 149F

04/24 11:06, 4年前 , 150F
更麻煩的是,由於缺乏背景知識,無法用精準術語和國際的
04/24 11:06, 150F

04/24 11:07, 4年前 , 151F
開發者溝通,就很難延展思維的廣度和深度
04/24 11:07, 151F

04/24 11:09, 4年前 , 152F
狀態有變(因為有了個edge)就trigger <-- 這樣子算背誦名詞嗎
04/24 11:09, 152F

04/24 11:11, 4年前 , 153F
比方說,為何稱為 "trigger"? 時間的測量計算又怎麼做?
04/24 11:11, 153F

04/24 11:11, 4年前 , 154F
04/24 11:11, 154F

04/24 11:20, 4年前 , 155F
稱為trigger就,有了個觸動,引發了事件?
04/24 11:20, 155F

04/24 11:24, 4年前 , 156F
有些名詞的確是數位邏輯裡先有的,懂了的確能比較快在第一時
04/24 11:24, 156F

04/24 11:24, 4年前 , 157F
間聽懂對方的意思。但現在google方便,不懂的去查一下理解一
04/24 11:24, 157F

04/24 11:27, 4年前 , 158F
下也很快。像開發時遇到HTTPS可能要懂憑證的工作原理
04/24 11:27, 158F

04/24 11:28, 4年前 , 159F
但不用真的學完密碼學…
04/24 11:28, 159F

04/24 11:42, 4年前 , 160F
04/24 11:42, 160F

04/24 12:01, 4年前 , 161F
04/24 12:01, 161F

04/24 12:21, 4年前 , 162F
推推
04/24 12:21, 162F

04/24 12:38, 4年前 , 163F
推,感謝老師回覆m(_ _)m,我只是想發發廢文而已(#
04/24 12:38, 163F

04/24 12:45, 4年前 , 164F
有神快拜
04/24 12:45, 164F

04/24 13:02, 4年前 , 165F
@bluejrl, 「上人」不能亂說 #我剛吃完雞排
04/24 13:02, 165F

04/24 13:07, 4年前 , 166F
04/24 13:07, 166F

04/24 13:21, 4年前 , 167F
請不要擅自把廢文的標準提高!
04/24 13:21, 167F

04/24 13:24, 4年前 , 168F
媽 我在這
04/24 13:24, 168F

04/24 13:42, 4年前 , 169F
推,好猛
04/24 13:42, 169F

04/24 14:07, 4年前 , 170F
jserv 我媽說看到這幾個字先跪再說
04/24 14:07, 170F

04/24 14:07, 4年前 , 171F
推推
04/24 14:07, 171F

04/24 14:38, 4年前 , 172F
@vvrr, 的確,先不要壞了對新事物的胃口,再開拓心胸接受
04/24 14:38, 172F

04/24 17:06, 4年前 , 173F
推jserv大
04/24 17:06, 173F

04/24 17:36, 4年前 , 174F
04/24 17:36, 174F

04/24 18:18, 4年前 , 175F
推一個,雖然我看不董QQ
04/24 18:18, 175F

04/24 19:35, 4年前 , 176F
04/24 19:35, 176F

04/24 21:11, 4年前 , 177F
太神啦!!!
04/24 21:11, 177F

04/24 22:31, 4年前 , 178F
奇怪,這篇反而看得懂,看來我不用重修數位電路實驗和微
04/24 22:31, 178F

04/24 22:31, 4年前 , 179F
處理器了哈哈哈哈。
04/24 22:31, 179F

04/25 00:23, 4年前 , 180F
請問這篇是日文嗎?為什麼有漢字可是我都看不懂
04/25 00:23, 180F

04/25 00:36, 4年前 , 181F
推推
04/25 00:36, 181F

04/25 00:49, 4年前 , 182F
跪著看
04/25 00:49, 182F
文章代碼(AID): #1UeX4k_6 (Gossiping)
文章代碼(AID): #1UeX4k_6 (Gossiping)