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

看板 Soft_Job
作者 kqalea (沙丁魚罐頭)
時間 2020-04-24 10:11:27
留言 194 ( 129推 1噓 64→ )
※ [本文轉錄自 Gossiping 看板 #1UeX4k_6 ] 作者: jserv (松鼠) 看板: Gossiping 標題: Re: [問卦] 精通數位邏輯對Coding有什麼幫助? 時間: Fri Apr 24 06:05:27 2020 ※ 引述《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

留言

Behind4 又來 好文 推 04/24 06:07 1F
mikemagic88 前十 04/24 06:08 2F
gorilla823 04/24 06:10 3F
※ 編輯: jserv (140.116.246.163 臺灣), 04/24/2020 06:12:30
KevinR push 04/24 06:11 4F
Behind4 問個小問題 跑 PHP server 效能X86 ARM 真的會像有些 文 04/24 06:13 5F
Behind4 章說的 效能差到千倍嗎? 04/24 06:13 6F
jserv @Behind4, Arm 伺服器的調教很繁瑣,若沒有特別調整,效能 04/24 06:14 7F
jserv 的確會是問題。不過這件事在 AWS 的 Arm 伺服器陸續有解法 04/24 06:14 8F
dostey 只是對應 a,b <-> 0,1 <-> 高,低 04/24 06:14 9F
SydLrio 老師不要這樣,你上一篇我還沒看完,我想下課 04/24 06:15 10F
robin10205 推推 04/24 06:15 11F
jserv @SydLrio, 我只是等早餐店開門,順手發廢文,你不用認真 04/24 06:16 12F
renna038766 116哪間 蛤 04/24 06:17 13F
jserv @renna038766, 116 是台灣最好的學店,你有意見嗎? 04/24 06:18 14F
renna038766 你把118放哪 蛤 04/24 06:19 15F
wario2014 深深覺得,coding是智商高的人在玩的 04/24 06:20 16F
wario2014 光靠下苦功的話效率還是遠遠不及,大腦反應時間差太多 04/24 06:21 17F
jserv @wario2014, 所以更要多利用討論區交流,教學相長 04/24 06:21 18F
corel 神人快拜 04/24 06:21 19F
freeblizzard 推這篇 04/24 06:25 20F
DanGong5566 原來是Jserv,好,先跪下去再說 04/24 06:28 21F
yyyyyyyv 推推 04/24 06:35 22F
Behind4 Amazon Web Services這個?? 他用ARM架構的CPU? 為了節能 04/24 06:36 23F
Behind4 嗎?其實我本來要問的只是用手機架站的實用性XDDD 04/24 06:36 24F
lice0225 請收下我的膝蓋 04/24 06:37 25F
jserv @Behind4, 請查詢 AWS Graviton2 處理器 04/24 06:37 26F
Behind4 coding 應該不用那麼嚴肅吧 =__= 這應該是件好玩的事 04/24 06:38 27F
Behind4 謝謝 04/24 06:38 28F
jserv @Behind4, 手機裡頭執行網頁伺服器的案例不算少,不過... 04/24 06:39 29F
chaosJames 04/24 06:39 30F
jserv 有時候是手機製造商或晶片設計商提供的「後門」(但我不能說 04/24 06:40 31F
riker729 連名字都是 有多熱愛啊 04/24 06:41 32F
jserv @riker729, 小時聽到「人生以服務為目的」,長大就開發 04/24 06:43 33F
jserv server 了 (咦?) 04/24 06:43 34F
riker729 這兩年寫設備的web 深深覺得太混亂了 還得考慮相容性 04/24 06:46 35F
bobohorn 好猛的等早餐廢文 04/24 06:46 36F
moonshade 簡單來說都不用懂,那些問題kernel都解決了 04/24 06:47 37F
moonshade 這些東西老早在posix裡面都有東西包起來了 04/24 06:48 38F
jserv @moonshade, 但要會用呀,特別是 OS-specific 04/24 06:48 39F
Behind4 好靠北哦 後門的只想到中國……… 04/24 06:48 40F
moonshade 剪貼那麼多廢話看起來可怕而已... 04/24 06:49 41F
jserv @moonshade, 人在 116 就要發廢文,鄉民認證 04/24 06:49 42F
gorilla823 Verilog好難 04/24 06:50 43F
jserv @gorilla823, 人生更難 04/24 06:50 44F
moonshade 再說back-end 工程師不值錢,別人把你當小精靈兒已 04/24 06:51 45F
ts05593818 老師早 04/24 06:53 46F
moonshade 不過話說,做ARM上的linux就是另一回事了 04/24 06:57 47F
angerD 未看先推 04/24 06:57 48F
moonshade 不是所有的廠商都符合spec... 04/24 06:58 49F
jserv 還是當大學教授好,沒人對大學教授有程式設計的期待 (無誤) 04/24 07:00 50F
l7th 早餐店老板用interrupt要你拿早餐啦... 04/24 07:02 51F
Behind4 雖然覺得有趣 但感覺不是同一個世界的東西 04/24 07:03 52F
angerD 原來daemon有惡魔的意思 04/24 07:03 53F
jserv @angerD, http://catb.org/jargon/html/D/daemon.html # 04/24 07:04 54F
jserv 在早期的分時多工作業系統 CTSS (1961) 就有 "daemon" 一詞 04/24 07:05 55F
sugoi5566 百推內 04/24 07:08 56F
Merkle 連jserv都不知道的井蛙還好意思大小聲 嘖嘖 04/24 07:12 57F
Behind4 我就不知道欸 我只是看內文推的 04/24 07:15 58F
vovovolibear 我怎麼沒聽到雷聲? 我們在同一個116? 04/24 07:16 59F
Xiphity 推jserv 04/24 07:16 60F
jaid 一口氣兩篇辛苦了 04/24 07:17 61F
ERT312 推推 04/24 07:21 62F
spector66 快推 04/24 07:24 63F
angerD 謝謝老師,想請問老師如果要找樹狀結構與輸入法的關係 該 04/24 07:27 64F
angerD 下什麼關鍵字 04/24 07:27 65F
xeriof95092 老師 別鬧 哪家早餐店這麼晚開 04/24 07:31 66F
seeya08 push 04/24 07:32 67F
g5637128 04/24 07:32 68F
s0914714 早餐店被blocking了 04/24 07:33 69F
OBST5566 我這個人很多簡單 有瑟夫就推 04/24 07:38 70F
wbreeze 推推 04/24 07:42 71F
a4786033 04/24 07:49 72F
sn0w 推! 04/24 07:50 73F
frappe 這家早餐店讓人拖這麼久,太誇張了吧?XD 04/24 07:51 74F
HYDE1986 竟然已經有人不認識jserv惹.... 04/24 07:54 75F
amethystboy 真 人機合一 04/24 07:55 76F
snow10725 一直看到熱門 推推 04/24 08:02 77F
thinkfun 推 好文 04/24 08:07 78F
ohsuoh 太誇張了 發兩篇 04/24 08:13 79F
flyvegetable 好文共賞 04/24 08:15 80F
yuiweq1999 原來是神 04/24 08:18 81F
huangmin9487 push 04/24 08:19 82F
Colitas 搶推 04/24 08:19 83F
uohZemllac 好文給推 04/24 08:20 84F
ashs92223 讚! 04/24 08:21 85F
yeh628 老師好帥!!!! 04/24 08:24 86F
hakosaki 推jserv 04/24 08:28 87F
cool9203 04/24 08:30 88F
MidoBanA 04/24 08:30 89F
sses60802 100推內 04/24 08:30 90F
emptie 謝謝你 04/24 08:34 91F
ku399999 膝蓋送出 04/24 08:36 92F
Agdanpanda 04/24 08:37 93F
jeremylouee 推個 04/24 08:39 94F
erre 那麼複雜還是掰陳改參數call svm做ai的cp值高 04/24 08:40 95F
yee999 04/24 08:40 96F
charF 下一篇 Re:精通ptt廢文對Coding有什麼幫助? 04/24 08:42 97F
da21510 百推內 先跪 04/24 08:43 98F
da21510 慚愧 老師的課程一直沒看完 04/24 08:43 99F
apple123773 快跪 04/24 08:44 100F
x077155203 有神快拜 04/24 08:48 101F
LeafLu 推jserv!! 04/24 08:49 102F
randy061 朝聖 但太深了… 04/24 08:50 103F
dangerousair 幹軟體的都看不懂只看得懂邏設那些詞而已 04/24 08:53 104F
herculus6502 神串留名 04/24 08:58 105F
sniper2824 跟鬼一樣先推再看 04/24 08:59 106F
DWR 原來是jserv 還在想說那個鄉民這麼強又跑出來了 04/24 09:02 107F
qppqqp 正 老師 出現了 拜 04/24 09:04 108F
fine325011 04/24 09:06 109F
dingbebbie 老師推推 04/24 09:07 110F
shorty696820 推宅瑟夫 04/24 09:09 111F
loveyanzi03 先推 04/24 09:14 112F
Gold740716 04/24 09:15 113F
jserv @angerD, https://github.com/chewing/chewing.github.com 04/24 09:17 114F
jserv 的 doc/ 目錄,可見到酷音輸入法的技術報告 (2001 年) 04/24 09:17 115F
jserv (筆誤,應為 2002 年) 04/24 09:18 116F
tpegioe 04/24 09:18 117F
jserv @da21510, 期待你的作業 :-) 04/24 09:18 118F
adsop 04/24 09:19 119F
vi000246 04/24 09:19 120F
Morris1028 推老師 04/24 09:20 121F
ki59920 04/24 09:23 122F
as920909 推大大 04/24 09:32 123F
abb123456 04/24 09:34 124F
ila9970 神人帳號必推 04/24 09:35 125F
donation12 這篇真好! 04/24 09:36 126F
kero0331 怎麼覺得唐鳳會來留言 04/24 09:38 127F
gR7P4zXH 傻眼貓咪 04/24 09:38 128F
Lbj1101 只能推了 04/24 09:42 129F
albert0525 推推 04/24 09:58 130F
jserv @kero0331, 快來許願:從開發口罩預購系統看電腦科學 04/24 10:03 131F
shinXIII 看到這篇我都不敢說我會寫程式了.. 04/24 10:04 132F
mooto 呃,我真懷疑有多少人是看懂才推,哥是豬屎屋的,怎麼覺得 04/24 10:05 133F
mooto 被你講的很複雜,難怪資工的跑來寫電路設計,總是很難讀。 04/24 10:05 134F
mooto 簡而言之,邏輯設計的根本是硬體,用這個概念coding,跟程 04/24 10:05 135F
mooto 式底的不一樣 04/24 10:06 136F
bewritten 先推 04/24 10:07 137F
route22 邏輯設計就寫積木 然後一個控制叫它們動起來 04/24 10:08 138F
※ 轉錄者: kqalea (111.71.82.240 臺灣), 04/24/2020 10:11:27
shiauji 量子力學需用波函數描述稱作幽靈還行,數位邏輯設計是要 04/24 10:29 139F
shiauji 用波函數描述嗎.... 這比喻...嗯 04/24 10:29 140F
dandelionh 真想學 請問已離開學校很久的有機會學嗎... 04/24 10:49 141F
DCTmaybe 想學的看[5]就是了... 課程超硬 04/24 10:51 142F
jserv @shiauji, 主要是不是每位軟體開發者都能留意到微觀世界 04/24 10:51 143F
jserv 有關,但我相信很多軟體開發者人員極難想到這些資訊洩露 04/24 10:53 144F
jserv 如何發生。於是我就用不精準的比喻 (等著吃早餐時發廢文) 04/24 10:53 145F
jserv 例如近期若干 side-channel attack 多跟計算機結構內部設計 04/24 10:54 146F
shiauji 了解,確實用微觀世界來講就貼切的多,感謝回覆 04/24 11:02 147F
ilovejesus 04/24 11:23 148F
imchou239 04/24 11:52 149F
james732 04/24 11:55 150F
JJHu 快推 04/24 12:08 151F
Yunyung 神神神 04/24 13:09 152F
readper 有神快推 04/24 13:12 153F
paint 想上這兩門課耶 希望能聽得懂 04/24 13:24 154F
cecol 數位邏輯真的是CS必修黑歷史 04/24 13:33 155F
locklose 04/24 13:40 156F
linnom 推老師 04/24 13:46 157F
cory8249 04/24 14:25 158F
Masakiad 好文 04/24 15:31 159F
cuteSquirrel good 04/24 17:16 160F
Walkers 04/24 20:57 161F
jj0321 釣到JSERV 原原PO可以跪下了 04/24 21:08 162F
s860134 最近很多篇都是教數值系統和二元運算 你所不知道的c語言 04/24 21:39 163F
BignoZe 太神啦 04/24 22:00 164F
zmcx16 宅色夫推 04/24 23:14 165F
shter 寫程式本來是離不開硬體知識的,但是這幾年因為虛擬機技術 04/25 08:13 166F
shter 和跨平台執行問題,變的軟硬體中間有很多層包裝 04/25 08:13 167F
shter 除非追求效能的產品,不然大多以好維護的框架為主流 04/25 08:13 168F
pttano 跪...... 04/25 08:27 169F
cphe 釣到大神 04/25 09:38 170F
nurockplayer 推宅色夫 04/25 13:26 171F
superpandal 恩 不是我想了解的東西... 需要了解某些黑科技 04/26 05:35 172F
kevinfilter 04/26 13:51 173F
brucetu 寫的很猛不愧是jserv 不過拜完神還是要探討一下另一個觀 04/26 16:56 174F
brucetu 04/26 16:56 175F
brucetu 就是只想做偉大的app其實真的不用會很多資工知識 04/26 16:57 176F
brucetu 畢竟系統就是層層封裝,所以會正反器要說對開發高併發伺 04/26 16:59 177F
brucetu 服器應用的幫助跟影響很大嗎,也不見得,只是每個東西我 04/26 16:59 178F
brucetu 們都一定能講出他在哪個case很有用 04/26 16:59 179F
brucetu 所以興趣在哪裡就從那個點往四周探索,對每個細節盡量掌 04/26 17:02 180F
brucetu 握也是好的,但不必要從最底層開始學好學滿所有細節 04/26 17:02 181F
brucetu 費馬大定理結語不就說了先有興趣才能點亮這些磚瓦最後構 04/26 17:13 182F
brucetu 成豐碑嗎?所以對數位邏輯電路沒興趣的同學其實不必糾結 04/26 17:13 183F
brucetu ,雖然磚瓦重要,但是不需要從最底層的每一塊磚瓦開始堆 04/26 17:13 184F
brucetu 疊,從興趣出發先去看看其他的磚,至於數位邏輯電路,等 04/26 17:13 185F
brucetu 你有需要瞭解的時候自然就會有動力去瞭解他,在這個層層 04/26 17:13 186F
brucetu 堆疊的資訊工程中,我負責蓋樓梯的,知道房子地基怎麼打 04/26 17:13 187F
brucetu 可能很有幫助,但是有別人會去打好地基,我就專心蓋我的 04/26 17:13 188F
brucetu 樓梯 04/26 17:13 189F
gn01838335 剛好相反。leetCode Single Number。若不知道XOR可能C 04/27 16:40 190F
gn01838335 code寫很多。有些軟工設計的應用場景,數位邏輯概念存 04/27 16:41 191F
gn01838335 再。只是您還沒碰到這個CASE。 04/27 16:42 192F
gn01838335 若有紮實學習好處是,有key 馬上 可以google答案。 04/27 16:42 193F
k078787878 看不懂QAQ 04/28 20:21 194F

最新文章

[贈送] 竹北自取 豐力富奶粉
give paperboy
2024-11-06 00:29:49
[心得] 楊金龍可以進來了
home-sale ininpussy
2024-11-06 00:16:09
[宜蘭/個人]出席講座
part-time wheat5566
2024-11-06 00:15:32
[交易] 星巴克110元星享飲料券
e-coupon mind8516
2024-11-06 00:00:04
[家教] 小學三年級女童數學家教
hometeach emma08162000
2024-11-05 23:59:02
[徵求] 7-11 滿250元-25元抵用券
e-coupon freetertw
2024-11-05 23:58:37
[徵求] 中華電信勁爽加量包 5G
e-coupon leo251029
2024-11-05 23:57:47