-
過去寫了 好幾篇跟執行緒相關的文章 ,講的都是如何精確控制執行緒的問題。不過實際上有在寫的人就知道,那些只是 "工具",最重要的還是你該怎樣安排你的程式,讓它能有效率的用到執行緒的好處,那才是重點。大部份能有效利用到多執行緒的程式,大都是大量且獨立的小動作,可以很簡單的撒下去給ThreadPool處理,不過當你的程式沒辦法這樣切,就要想點別的辦法了。 開始看 code 前先講講簡單的概念。這篇要講的是另一種模式: "生產者 v.s. 消費者"。這是個很典型的供需問題...
-
雖然 上禮拜就知道了 ,不過 獎品 還沒拿到,當然要忍一下再發表... 哈哈! 花了幾個晚上拼了 猜數字的程式 ,運氣不錯,順利拼到冠軍了。除了寫程式,把心得貼到 BLOG 也花了不少時間.. 主要貼的這四篇: Thread Sync #1. 概念篇 - 如何化被動為主動? Thread Sync #2. 實作篇 - 互相等待的兩個執行緒 [C#: yield return] #1. How It Work ? [C# yield return] #2. 另類的應用 - Thread Sync 替代方案...
-
繼 上篇 ,講了一些 yield return 編譯後產生的 Code, 說明了 C# compiler 如何用簡單的語法替你實作了 IEnumerator 介面,而完全不會增加程式的複雜度,這是我認為 C# 提供最讚的 Syntax Sugar ...。 不過無意間我想到了 yield return 還有另一種應用方式。靈感來自之前 Darkthread 舉辦的 [ 黑暗盃程式魔人賽 ]。因為參賽題目 [xAxB猜數字遊戲] 原本就是考驗演算法,邏輯就不大簡單了,加上要配合 GameHost 的呼叫方式...
-
繼 上篇 , 有人 跟我講太深奧了... Orz, 其實不會,只是還沒看到 Code 而以...。就先來幫 黑暗魔人賽 說明一下程式碼...。首先來看的是黑暗大魔王: GameHost.. GameHost 呼叫 Player 的片段 [copy code] public void Start(Player p) { // 略... int[] guess = p.StartGuess(_maxNum, _digits); // 略... Hint hint = compare(guess); 讀取更多...
-
別以為我轉行了... 這篇不是勵志文章,教你用主動積極的態度面對人生.... 而是討論執行緒同步機制及如何用來解決惱人的流程問題。會寫這篇的念頭來自 黑暗程式魔人辦的猜數字程式設計大賽 ,在處理的過程中想到的解法...,不過這篇要講的不是猜數字,而是不相干的東西: Thread Sync (執行緒的同步機制)。 一般程式寫久了,會很習慣一路到底的思考方式,程式也完全照這樣的思路被設計出來。不過寫 GAME 這類的程式就不是這麼一回事了。就先舉十五年前我用 C 寫的俄羅斯方塊的遊戲當例子 (大驚!...
-
看來是換四核心CPU的時機到了 之前弄了半天的歸檔程式,效能都卡在 .CR2 -> .JPG 這段。雖然祭出了 ThreadPool,也想盡辦法把獨立的工作湊在一起,盡量提升 CPU 的利用率,不過得到的效果有限,因為最後都是剩下 .CR2 的檔案轉不完啊,其它拿來填空檔的工作早就做完了,實在不成比例... 整體效能還是卡在最慢的 Canon Codec 身上... 這次無意間想到,單一 process 內,Canon Codec 有過多不能重複進入的問題 (不能同時利用到兩顆CPU),那麼拆成兩個獨立的 process 是否就解決了? 想一想還蠻可行的,通常為了安全,都只需要做到 process...