※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2020-04-24 11:02:32
看板 Gossiping
作者 標題 Re: [問卦] 精通數位邏輯對Coding有什麼幫助?
時間 Fri Apr 24 06:05:27 2020
※ 引述《HankYang (密探X)》之銘言:
: 餓死抬頭
: 不是說二進位、布林代數、邏輯閘等等那些超超超超基礎的東東
: 那些東東其他科目也會教
: 而是指正反器、循序邏輯電路、狀態機等等鬼東西
: 那些對Coding有什麼幫助呀嘻嘻嘻
: 有沒有八卦?
外頭雨勢好大,趁著等著雨勢減小才能吃早餐的空擋,嘗試簡單回覆。先講結論,網頁
伺服器背後的運作,跟數位邏輯有關,而且原始程式碼裡頭就寫了 (!)
原提問的推文下方,skaterboy13 提到:
「在這邊問這個做啥? 一堆裝懂的人 什麼都會說很基本」
的確,人人都可說「很基本」,但這樣的「基本」到底體現在何處呢?應是原發問者所
在意。我教計算機結構 [1],會對著學員說,數位邏輯很「基本」,畢竟現行的電腦即是
在意。我教計算機結構 [1],會對著學員說,數位邏輯很「基本」,畢竟現行的電腦即是
架構在一系列的組合邏輯電路之上。可是對於通用的程式設計有何幫助呢?特別是原發問
者所提的正反器 (Flip-flop, FF)、序向邏輯電路 (sequential logic circuit),及
狀態機等等「鬼東西」。或許這樣的質疑在不少人心裡都有,尤其抱持著「開發偉大的
狀態機等等「鬼東西」。或許這樣的質疑在不少人心裡都有,尤其抱持著「開發偉大的
程式」心態到了資訊工程系就讀的同學,發現電子電路、數位邏輯、微處理器等課程都是
必修,不免感嘆「踩到地雷」了。
「如果我們一定非要那鬼量子躍遷不可,那我後悔參與量子理論。」 -- 在愛因斯坦
等人發表題為「量子力學能完整地解釋實在性嗎?」的論文、反駁量子世界觀之後,
薛丁格提出「薛丁格的貓」(Schrodinger's cat) 的論文。
等人發表題為「量子力學能完整地解釋實在性嗎?」的論文、反駁量子世界觀之後,
薛丁格提出「薛丁格的貓」(Schrodinger's cat) 的論文。
倘若量子力學是原子中的幽靈,那麼數位邏輯就是程式設計裡頭的幽靈 -- 是否能窺見、
是否「基本」,又能否給予你啟發,完全取決於你對於微觀世界的態度。
且讓我跳到開發高效率的網頁伺服器 (web server, 也稱 HTTP server 或 HTTP daemon,
後者的 "daemon" 原為惡魔之意,在 UNIX 的世界中引申爲常駐程式) 開發工作來討論,
再細談和數位邏輯的關聯。網頁伺服器這應該就符合原發問者對於程式設計的「程式」
後者的 "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
再來是狀態機 (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 通訊協定會遇上解析錯誤。為此,我們就需要維護
一套狀態機,對!就跟數位邏輯所探討的是同一個術語。
裡只要繼續 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 (臺灣)
※ 文章代碼(AID): #1UeX4k_6 (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1587679534.A.FC6.html
推 : 又來 好文 推1F 04/24 06:07
推 : 前十2F 04/24 06:08
推 : 推3F 04/24 06:10
※ 編輯: jserv (140.116.246.163 臺灣), 04/24/2020 06:12:30推 : push4F 04/24 06:11
推 : 問個小問題 跑 PHP server 效能X86 ARM 真的會像有些 文5F 04/24 06:13
→ : 章說的 效能差到千倍嗎?
→ : 章說的 效能差到千倍嗎?
→ : @Behind4, Arm 伺服器的調教很繁瑣,若沒有特別調整,效能7F 04/24 06:14
→ : 的確會是問題。不過這件事在 AWS 的 Arm 伺服器陸續有解法
→ : 的確會是問題。不過這件事在 AWS 的 Arm 伺服器陸續有解法
推 : 只是對應 a,b <-> 0,1 <-> 高,低9F 04/24 06:14
推 : 老師不要這樣,你上一篇我還沒看完,我想下課10F 04/24 06:15
推 : 推推11F 04/24 06:15
→ : @SydLrio, 我只是等早餐店開門,順手發廢文,你不用認真12F 04/24 06:16
噓 : 116哪間 蛤13F 04/24 06:17
→ : @renna038766, 116 是台灣最好的學店,你有意見嗎?14F 04/24 06:18
→ : 你把118放哪 蛤15F 04/24 06:19
推 : 深深覺得,coding是智商高的人在玩的16F 04/24 06:20
→ : 光靠下苦功的話效率還是遠遠不及,大腦反應時間差太多
→ : 光靠下苦功的話效率還是遠遠不及,大腦反應時間差太多
→ : @wario2014, 所以更要多利用討論區交流,教學相長18F 04/24 06:21
推 : 神人快拜19F 04/24 06:21
推 : 推這篇20F 04/24 06:25
推 : 原來是Jserv,好,先跪下去再說21F 04/24 06:28
推 : 推推22F 04/24 06:35
推 : Amazon Web Services這個?? 他用ARM架構的CPU? 為了節能23F 04/24 06:36
→ : 嗎?其實我本來要問的只是用手機架站的實用性XDDD
→ : 嗎?其實我本來要問的只是用手機架站的實用性XDDD
推 : 請收下我的膝蓋25F 04/24 06:37
→ : @Behind4, 請查詢 AWS Graviton2 處理器26F 04/24 06:37
→ : coding 應該不用那麼嚴肅吧 =__= 這應該是件好玩的事27F 04/24 06:38
→ : 謝謝
→ : 謝謝
→ : @Behind4, 手機裡頭執行網頁伺服器的案例不算少,不過...29F 04/24 06:39
推 : 推30F 04/24 06:39
→ : 有時候是手機製造商或晶片設計商提供的「後門」(但我不能說31F 04/24 06:40
推 : 連名字都是 有多熱愛啊32F 04/24 06:41
→ : @riker729, 小時聽到「人生以服務為目的」,長大就開發33F 04/24 06:43
→ : server 了 (咦?)
→ : server 了 (咦?)
推 : 這兩年寫設備的web 深深覺得太混亂了 還得考慮相容性35F 04/24 06:46
推 : 好猛的等早餐廢文36F 04/24 06:46
→ : 簡單來說都不用懂,那些問題kernel都解決了37F 04/24 06:47
→ : 這些東西老早在posix裡面都有東西包起來了
→ : 這些東西老早在posix裡面都有東西包起來了
→ : @moonshade, 但要會用呀,特別是 OS-specific39F 04/24 06:48
推 : 好靠北哦 後門的只想到中國………40F 04/24 06:48
→ : 剪貼那麼多廢話看起來可怕而已...41F 04/24 06:49
→ : @moonshade, 人在 116 就要發廢文,鄉民認證42F 04/24 06:49
推 : Verilog好難43F 04/24 06:50
→ : @gorilla823, 人生更難44F 04/24 06:50
→ : 再說back-end 工程師不值錢,別人把你當小精靈兒已45F 04/24 06:51
推 : 老師早46F 04/24 06:53
→ : 不過話說,做ARM上的linux就是另一回事了47F 04/24 06:57
推 : 未看先推48F 04/24 06:57
→ : 不是所有的廠商都符合spec...49F 04/24 06:58
→ : 還是當大學教授好,沒人對大學教授有程式設計的期待 (無誤)50F 04/24 07:00
推 : 早餐店老板用interrupt要你拿早餐啦...51F 04/24 07:02
推 : 雖然覺得有趣 但感覺不是同一個世界的東西52F 04/24 07:03
推 : 原來daemon有惡魔的意思53F 04/24 07:03
→ : 在早期的分時多工作業系統 CTSS (1961) 就有 "daemon" 一詞55F 04/24 07:05
推 : 百推內56F 04/24 07:08
推 : 連jserv都不知道的井蛙還好意思大小聲 嘖嘖57F 04/24 07:12
推 : 我就不知道欸 我只是看內文推的58F 04/24 07:15
推 : 我怎麼沒聽到雷聲? 我們在同一個116?59F 04/24 07:16
推 : 推jserv60F 04/24 07:16
推 : 一口氣兩篇辛苦了61F 04/24 07:17
推 : 推推62F 04/24 07:21
推 : 快推63F 04/24 07:24
推 : 謝謝老師,想請問老師如果要找樹狀結構與輸入法的關係 該64F 04/24 07:27
→ : 下什麼關鍵字
→ : 下什麼關鍵字
推 : 老師 別鬧 哪家早餐店這麼晚開66F 04/24 07:31
推 : push67F 04/24 07:32
推 : 推68F 04/24 07:32
推 : 早餐店被blocking了69F 04/24 07:33
推 : 我這個人很多簡單 有瑟夫就推70F 04/24 07:38
推 : 推推71F 04/24 07:42
推 : 推72F 04/24 07:49
推 : 推!73F 04/24 07:50
推 : 這家早餐店讓人拖這麼久,太誇張了吧?XD74F 04/24 07:51
推 : 竟然已經有人不認識jserv惹....75F 04/24 07:54
推 : 真 人機合一76F 04/24 07:55
推 : 一直看到熱門 推推77F 04/24 08:02
推 : 推 好文78F 04/24 08:07
推 : 太誇張了 發兩篇79F 04/24 08:13
推 : 好文共賞80F 04/24 08:15
推 : 原來是神81F 04/24 08:18
推 : push82F 04/24 08:19
推 : 搶推83F 04/24 08:19
推 : 好文給推84F 04/24 08:20
推 : 讚!85F 04/24 08:21
推 : 老師好帥!!!!86F 04/24 08:24
推 : 推jserv87F 04/24 08:28
推 : 推88F 04/24 08:30
推 : 推89F 04/24 08:30
推 : 100推內90F 04/24 08:30
推 : 謝謝你91F 04/24 08:34
推 : 膝蓋送出92F 04/24 08:36
推 : 推93F 04/24 08:37
推 : 推個94F 04/24 08:39
推 : 那麼複雜還是掰陳改參數call svm做ai的cp值高95F 04/24 08:40
推 : 推96F 04/24 08:40
推 : 下一篇 Re:精通ptt廢文對Coding有什麼幫助?97F 04/24 08:42
推 : 百推內 先跪98F 04/24 08:43
→ : 慚愧 老師的課程一直沒看完
→ : 慚愧 老師的課程一直沒看完
推 : 快跪100F 04/24 08:44
推 : 有神快拜101F 04/24 08:48
推 : 推jserv!!102F 04/24 08:49
推 : 朝聖 但太深了…103F 04/24 08:50
推 : 幹軟體的都看不懂只看得懂邏設那些詞而已104F 04/24 08:53
推 : 神串留名105F 04/24 08:58
推 : 跟鬼一樣先推再看106F 04/24 08:59
推 : 原來是jserv 還在想說那個鄉民這麼強又跑出來了107F 04/24 09:02
推 : 正 老師 出現了 拜108F 04/24 09:04
推 : 推109F 04/24 09:06
推 : 老師推推110F 04/24 09:07
推 : 推宅瑟夫111F 04/24 09:09
推 : 先推112F 04/24 09:14
推 : 推113F 04/24 09:15
GitHub - chewing/chewing.github.com: Chewing Project Website
Chewing Project Website. Contribute to chewing/chewing.github.com development by creating an account on GitHub. ...
Chewing Project Website. Contribute to chewing/chewing.github.com development by creating an account on GitHub. ...
→ : 的 doc/ 目錄,可見到酷音輸入法的技術報告 (2001 年)115F 04/24 09:17
→ : (筆誤,應為 2002 年)
→ : (筆誤,應為 2002 年)
推 :117F 04/24 09:18
→ : @da21510, 期待你的作業 :-)118F 04/24 09:18
推 : 推119F 04/24 09:19
推 : 推120F 04/24 09:19
推 : 推老師121F 04/24 09:20
推 : 推122F 04/24 09:23
推 : 推大大123F 04/24 09:32
推 : 推124F 04/24 09:34
推 : 神人帳號必推125F 04/24 09:35
推 : 這篇真好!126F 04/24 09:36
推 : 怎麼覺得唐鳳會來留言127F 04/24 09:38
推 : 傻眼貓咪128F 04/24 09:38
推 : 只能推了129F 04/24 09:42
推 : 推推130F 04/24 09:58
→ : @kero0331, 快來許願:從開發口罩預購系統看電腦科學131F 04/24 10:03
推 : 看到這篇我都不敢說我會寫程式了..132F 04/24 10:04
推 : 呃,我真懷疑有多少人是看懂才推,哥是豬屎屋的,怎麼覺得133F 04/24 10:05
→ : 被你講的很複雜,難怪資工的跑來寫電路設計,總是很難讀。
→ : 簡而言之,邏輯設計的根本是硬體,用這個概念coding,跟程
→ : 式底的不一樣
→ : 被你講的很複雜,難怪資工的跑來寫電路設計,總是很難讀。
→ : 簡而言之,邏輯設計的根本是硬體,用這個概念coding,跟程
→ : 式底的不一樣
推 : 先推137F 04/24 10:07
→ : 邏輯設計就寫積木 然後一個控制叫它們動起來138F 04/24 10:08
※ kqalea:轉錄至看板 Soft_Job 04/24 10:11
→ : 寫EDA tool的我真的覺得是天才139F 04/24 10:15
推 : 推140F 04/24 10:15
推 : 朝聖141F 04/24 10:26
推 : 再拜142F 04/24 10:42
推 : 推143F 04/24 10:45
推 : 你說的我完全不懂,肯定是高高在上天上人144F 04/24 10:46
推 : 推!145F 04/24 10:55
推 : edge/level trigger那個不用懂數位邏輯,當成純名詞定義146F 04/24 11:02
→ : 也很好理解吧
→ : 也很好理解吧
推 : 先推再慢慢啃內文148F 04/24 11:03
→ : @vvrr, 那就會陷入背誦名詞,而不知曉術語的由來149F 04/24 11:05
→ : 更麻煩的是,由於缺乏背景知識,無法用精準術語和國際的
→ : 開發者溝通,就很難延展思維的廣度和深度
→ : 更麻煩的是,由於缺乏背景知識,無法用精準術語和國際的
→ : 開發者溝通,就很難延展思維的廣度和深度
推 : 狀態有變(因為有了個edge)就trigger <-- 這樣子算背誦名詞嗎152F 04/24 11:09
→ : 比方說,為何稱為 "trigger"? 時間的測量計算又怎麼做?153F 04/24 11:11
→ : 神154F 04/24 11:11
推 : 稱為trigger就,有了個觸動,引發了事件?155F 04/24 11:20
推 : 有些名詞的確是數位邏輯裡先有的,懂了的確能比較快在第一時
→ : 間聽懂對方的意思。但現在google方便,不懂的去查一下理解一
→ : 下也很快。像開發時遇到HTTPS可能要懂憑證的工作原理
→ : 但不用真的學完密碼學…
推 : 有些名詞的確是數位邏輯裡先有的,懂了的確能比較快在第一時
→ : 間聽懂對方的意思。但現在google方便,不懂的去查一下理解一
→ : 下也很快。像開發時遇到HTTPS可能要懂憑證的工作原理
→ : 但不用真的學完密碼學…
推 : 推160F 04/24 11:42
推 : 推161F 04/24 12:01
推 : 推推162F 04/24 12:21
推 : 推,感謝老師回覆m(_ _)m,我只是想發發廢文而已(#163F 04/24 12:38
推 : 有神快拜164F 04/24 12:45
→ : @bluejrl, 「上人」不能亂說 #我剛吃完雞排165F 04/24 13:02
推 : 推166F 04/24 13:07
推 : 請不要擅自把廢文的標準提高!167F 04/24 13:21
推 : 媽 我在這168F 04/24 13:24
推 : 推,好猛169F 04/24 13:42
推 : jserv 我媽說看到這幾個字先跪再說170F 04/24 14:07
推 : 推推171F 04/24 14:07
→ : @vvrr, 的確,先不要壞了對新事物的胃口,再開拓心胸接受172F 04/24 14:38
推 : 推jserv大173F 04/24 17:06
推 : 推174F 04/24 17:36
推 : 推一個,雖然我看不董QQ175F 04/24 18:18
推 : 推176F 04/24 19:35
推 : 太神啦!!!177F 04/24 21:11
推 : 奇怪,這篇反而看得懂,看來我不用重修數位電路實驗和微178F 04/24 22:31
→ : 處理器了哈哈哈哈。
→ : 處理器了哈哈哈哈。
推 : 請問這篇是日文嗎?為什麼有漢字可是我都看不懂180F 04/25 00:23
推 : 推推181F 04/25 00:36
推 : 跪著看182F 04/25 00:49
--
※ 看板: Gossiping 文章推薦值: 0 目前人氣: 0 累積人氣: 517
04-24 16:00 TW
╳
sam82345679:[自己刪除]
回列表(←)
分享