2016年4月8日 星期五

理解Android裡的Process和Thread

要了解在Android裡的Process和Thread一定要先了解在OS中的Process和Thread是什麼意思
以下先列出幾個Process和Thread的定義和說明:

Thread :
使用CPU的最小單元,較為輕巧的process,一個process可以產生多的thread,CPU是配給thread使用。

Thread定義

OS :
行程(英語:process),是電腦中已執行程式的實體。行程為曾經是分時系統的基本運作單位。在面向行程設計的系統(如早期的UNIX,Linux 2.4及更早的版本)中,行程是程式的基本執行實體;在面向執行緒設計的系統(如當代多數作業系統、Linux 2.6及更新的版本)中,行程本身不是基本執行單位,而是執行緒的容器 (by wiki)

Process定義

OS 裡, process和thread的差別:

*一個Process可以有多個Thread, 在這個Process下的Threads共享這個Process的資源
同一個Process內的Thread使用相同的Memory Space,但這些Thread各自擁有其Stack。換句話說,Thread能透過reference存取到相同的Object,但是local variable卻是各自獨立的。
*作業系統會根據Thread的優先權以及已經用掉的CPU時間,在不同的Thread作切換
而一個Process的Global Variable可以讓它的所有Thread共享,也就是所有Thread都可以存取同一個Process的Global Variable。而每個Thread自己也有自己的專屬Variable


有了對Process和Thread的基本認識之後, 我們再來看看Android裡的Process和Thread
來看看Android developer上的說明:
http://developer.android.com/guide/components/processes-and-threads.html

"When an application component starts and the application does not have any other components running, the Android system starts a new Linux process for the application with a single thread of execution. By default, all components of the same application run in the same process and thread (called the "main" thread). If an application component starts and there already exists a process for that application (because another component from the application exists), then the component is started within that process and uses the same thread of execution. However, you can arrange for different components in your application to run in separate processes, and you can create additional threads for any process."

當一個Application被開啟、且此Application也未執行其他元件時,Android系統會create一個新的process,這個Process是single thread,也就是說,在建立Process的同時,也建立Thread。

在預設的情況下,Application做事,會被run在相同的process和thread(main thread又稱為UI thread)

另一種情況就是,在要start Application時,已經存在這個Application的Process了。如果是這種情況,就不會在開一個Process,而是在同一個Process內執行,並且是使用相同的執行緒來執行,也就是UI thread(我的解讀是,如果原本建立好的tid只有5788這個main thread,那麼接著也會用這個tid 5788的thread來做執行)。




沒有留言:

張貼留言