2015年1月30日 星期五

台灣繁中Concurrency Programming Guide (I)

Introduction

Concurrency(共時性)是一種概念,它想表達的是許多事情在同一個時間點發生。隨著多核心CPU的發展,軟體開發者需要用新的方式以便對CPU做更好的使用。雖然像OS X和iOS的作業系統能夠同時執行許多程式,但是其中大部份的程式是以背景方式執行且只向作業系統要求很短的「連續處理時間」。而造成電腦忙碌的是使用者正在前景執行的程式。如果一個應用軟體很忙碌,而你又只允許給它小部分的核心資源,那大部分的資源就會因為閒置造成浪費。
在過去,要實作程式的concurrency需要建立一個以上的thread,撰寫有關thread的程式碼又是相當的困難,因為thread是屬於比較低階的工具,所以都要手動去管理,想要給定理想的thread數量,需要考慮到目前系統的負荷跟硬體的規格等等。更慘的是,用來處理thread之間的同步機制,常常會增加軟體設計的複雜度和風險,但卻不能保證一定會有更好的效能。 
OS X跟iOS都採用了相較於傳統使用thread方式更加非同步的方法來實作concurrent的事件,比起直接創建一個thread,應用程式只需定義你想要做concurrent的事件然後讓系統自行去管理,如此一來,應用程式的擴展性會比原來的thread用法好的多!開發者也會得到更簡單而有效率的編寫concurrent程式的模型。 
這份文件會教你在程式中實作concurrency的一些技巧和技術,這些技術在OS X和iOS中都是可以通用的。

Organization of This Document

這份文件包含下列幾個章節:
這份文件也提供了相關術語的詞彙表。





A Note About Terminology

在深入討論concurrency之前,有必要先定義一些相關術語來避免混淆。比較熟悉UNIX系統或舊式OS X的開發者們會發現這些術語 “task”, “process”, “thread” 在這份文件中的用法有點不同。這件文件中的用法如下所示:
  • thread :表示程式碼在不同的路徑的執行過程。在OS X中是由POSIX threads API來實作。
  • process :表示正在執行的程式,裡面包含很多thread。
  • task :是一個抽象概念,用來表示你需要完成的工作。
若想了解這些術語的完整定義,以及其他術語的用法,請參照術語詞彙表(Glossary).


See Also

這份文件將重點放在如何在你的app中實作concurrency,而未包含如果使用threads,如果你想了解如何使用thread,你可以參考另外這份文件 Threading Programming Guide.