本文章是由機器翻譯。

不吐不快

蒸氣鑽

David Platt

David PlattJohn亨利說: 船長, "一個男人沒什麼只一個男人但我讓我打敗你蒸汽鑽之前,我會死用錘子在我的手。

—"情歌的John亨利"美國傳統

John亨利佔據美國民間傳說中一個強大的地方 (bit.ly/3HqIMd)。有些人說他是只是一個高大的故事,但其他人堅持認為他基於一個真正的男人。John亨利"開車鋼"在 19 世紀晚期,碰撞到鋼鑽杆、 大錘鏜孔入岩石爆破鐵路隧道。當蒸汽動力鑽威脅他的工作時,John亨利向一場決鬥挑戰它 — 贏了。民謠說:John亨利駕駛 16 英尺和蒸汽鑽僅作九,"。但不管你聽到這首歌的哪個版本,它總是收場了:"他辛勤工作,他打破了他可憐的心,所以他放下他的錘子,他死了"。

這種典型硬體的傢伙已經用軟體做,聽說你想知道。我有我自己的John亨利時刻上周,教學在哈佛延長我"程式設計 Microsoft.NET"類中的執行緒。我開始我的學生與原始執行緒,然後給他們看了執行緒池,然後進入同步和執行緒關聯的設計問題。結束與殘酷家庭作業,就讓他們使用執行緒池,但規定不允許它的要求。(學生:"普拉特,你是一個虐待狂"我:"嗯,是的你點是什麼嗎?")

下周我給他們看的任務並行庫 (TPL),與它的 Parallel.For 和 Parallel.ForEach 構造。我然後告訴他們我自己也不相信它。它是太新了。它不救我足夠的時間和精力來補償損失的控制和透明度。然後我意識到我我也會變成的恐龍。

在計算每個預先已生成了一個新的抽象層。並與每一個更高的抽象級別,列國努力掌握較低級別的程式師會生氣。現在任何白癡可以做他們壞了他們的屁股來學習。不公平 !

例如,磁磁片類似第一次出來的時候不得不直接指揮硬體的程式師 — 採取頭 3、 移動跟蹤 19、 等待部門 247 要過來,然後閱讀它。然後一些聰明的傢伙想出如何隱藏背後提供一系列邏輯上連續的位元組被稱為檔的一個軟體抽象層硬體。

"它是方式效率低下,"懷古尖叫。"你的孩子這些天有沒有尊重資源。認為所有這些部門都被浪費了,做什麼你叫他們的目錄?

"你們這群老放屁,"冷笑孩子們。"做你仍然節目與唯一的 1 和 0?"

何時過我飛躍從暴發戶磕到?我有沒有問題,執行緒池。我展示學生如何監督其執行緒的 CPU 使用率將更多的執行緒分配給該作業,當其中一些阻止。但至少在那裡我可以看到的執行緒,而不是協力廠商物流,他們就藏在哪裡。

我總是發現有不能代替的知道發生了什麼事在引擎蓋下。抽象總是漏出。磁片成為碎片,散射不方便群集需要金屬的浪費移動的檔。那些在我 MFC 類年前做最好的學生是那些聽從我的意見,研究對 Windows API 的CharlesPetzold 經典著作。每當我修復客戶與執行緒相關的問題,它總是 — 我的意思是每一次,無一例外 — 源于基本的誤解什麼執行緒是和不會。

所以吧,使用協力廠商物流 Parallel.For 和 Parallel.ForEach。但如果你使用它們作為一種精神寄託不了解他們真正的工作,就像使用內胎要劃出去到波士頓港口的中間,不知道如何游泳。你就會大喊著為海岸警衛隊的我,這樣的人來拯救你。幸運的是,我們的球,因為我們知道我們必須。一個怪人只不過是一個怪人。我讓你打我的協力廠商物流之前,我會死與執行緒的控制碼,在我的手。

David S. Platt 教授在哈佛大學擴建學校和在世界各地的公司的.net 程式設計。他是 11 程式設計書籍,包括"為什麼軟體吸"(艾迪生 - 衛斯理專業,2006年) 和"介紹 Microsoft.net"(微軟出版社,2002 年) 的作者。微軟在 2002 年命名他一個軟體傳奇。 他不禁懷疑是否他應該磁帶下兩個女兒的手指讓她學會了如何進行計數八進位數。您可以聯繫他在 rollthunder.com