溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

IOS 多線程漫漫談(Process and Thread)

發(fā)布時間:2020-10-15 09:33:25 來源:網(wǎng)絡(luò) 閱讀:730 作者:sb的天空 欄目:移動開發(fā)

前言 

時間就是一把殺豬刀,歲月更是毫不留情的在我英俊的臉上留下痕跡!恨呀,這就開始了我的社會之旅。2015年上海,在拉鉤網(wǎng)中投遍了IOS實習(xí)崗,兩家面試!在面試中受到的打擊著實不清呀,其中心酸就不一一道來了。在學(xué)校時候?qū)W的不認真,學(xué)習(xí)的時候又沒有筆記,知識在又沒有實際的項目實踐,最后的結(jié)果就是什么都知道都聽過,但是具體的什么都說不出來!所以毅然決然的決定投身于寫博客的大隊伍中,與各位共勉。

(PS:既然是社會之旅,除了技術(shù)的敲門磚,當然還有就是做人了!我只能說我被HR給刷過)



漫漫談(Process and Thread)

作為資深的菜鳥級應(yīng)屆畢業(yè)生,我向大家承若本文包括以后的所有文章都將是“原創(chuàng)”------那是不可能的,是原創(chuàng)加借鑒啦~~(其實就是“抄襲了”,我相信寫過畢業(yè)論文的童鞋們都身+“深”有體會!)


首先來談?wù)?process(傳說中的進程) and thread(傳說中的線程),不知道大家有沒有發(fā)現(xiàn)中文的進程與線程是很有迷惑性(TMD就一字之差),但是當你洋氣的用 process and thread to read them 你就會問“他們”之間有半毛錢關(guān)系嗎,確實有點關(guān)系的!只能說大english確實很有意思的,英語不行的”鳥“兒們該向我們大english妥協(xié)了,因為所有新的技術(shù)一開始都是english版的,不要否認!swift剛出就只有就是英文版的。雖然我也是”四級“飄過的渣渣!


Process VS Thread 

借鑒地址:http://www.programmerinterview.com/index.php/operating-systems/thread-vs-process/


process (進程):A process is an executing  instance of an application. 

                          進程是APP運行(執(zhí)行)的實例

Thread (線程):A thread is a path of execution within a process.

                         線程是進程中的一條運行(執(zhí)行)路徑。

看到這里我就有點像吐槽下教科書神馬的了,天書呀有木有!讀者們,別罵我從洋媚外IOS 多線程漫漫談(Process and Thread)

一個App啟動或者說運行的時候,就會在Operation System(操作系統(tǒng))中創(chuàng)建一個process,是windows的同學(xué)打開你的 the task manager(任務(wù)管理器)看下你早已運行的QQ是有多少個processes? 有多少Threads? 用mac的同學(xué)打開你們的Activity Monitor,本人用的是mac503 五年前的產(chǎn)品了,附圖如下: IOS 多線程漫漫談(Process and Thread)

大家看我們的大QQ,QQ在Activity Monitor中只是mac運行中 All Processes中的一個process,而QQ中的Threads有9條。這樣就完美的詮釋了process(進程)和 thread(線程)的概念。


下面來聊聊,進程與線程之間的恩怨(process VS thread),那么他們之間的有什么不同呢?

先上英文版的:(借鑒地址:同上)

1. Threads are easier to create than processes since they 
don't require a separate address space.
						
2. Multithreading requires careful programming since threads 
share data strucures that should only be modified by one thread
at a time.  Unlike threads, processes don't share the same 
address space.
						
3.  Threads are considered lightweight because they use far 
less resources than processes.
						
4.  Processes are independent of each other.  Threads, since they 
share the same address space are interdependent, so caution 
must be taken so that different threads don't step on each other.  
This is really another way of stating #2 above.
						
5.  A process can consist of multiple threads.

1、由于創(chuàng)建process(進程)需要分配一個片單獨的地址空間(或者說內(nèi)存空間),而thread是進程中執(zhí)行的路徑,線程使用的地址空間(內(nèi)存空間)就是process(進程)的空間,不需要額外消耗內(nèi)存創(chuàng)建線程。所以說線程的創(chuàng)建比進程容易。

2、原文翻譯:由于線程之間共享同一數(shù)據(jù)結(jié)構(gòu),在同一時間里只能由一個線程對數(shù)據(jù)結(jié)構(gòu)進行修改,因此多線程編程需要非常小心,而對于進程就不要擔(dān)心了,因為進程之間都有各自獨立的地址空間。

見解:由于線程之間是共享同一數(shù)據(jù)結(jié)構(gòu)的,所以一旦線程很多,那么就會出現(xiàn)線程對同一數(shù)據(jù)修改的混亂問題。所以在多線程編程時一定要思路清晰。

3、原文翻譯:線程被認為是輕量級的,因為線程所需的資源比進程少的多。

見解:在文章的原文有一句這樣子的話,我也挺認同的:It’s important to note that a thread can do anything a process can do. 意思是:很有必要指出線程可以做到進程可以做的任何東西。我們可以這樣理解,進程就是悟空,線程就是就是悟空的分身了。悟空的分身可以干悟空能干的事情,但是分身就是分身實力有限,所以可以被認為是輕量級的;而悟空本人就牛逼多了,所以被認為是重量級的(heavyweight)。

4、原文翻譯:進程之間是相互獨立的,而線程之間由于分享的是同一地址空間所以是線程之間是不獨立的。所以一定要小心線程之間的“互踩”(同時對一個對象進行操作)。

5、原文翻譯:一個進程可以由多個線程組成。


ps:第一次寫博文,不好之處歡迎吐槽!由于操作系統(tǒng)知識忘的差不多了,改天一定把補上!


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI