您好,登錄后才能下訂單哦!
前言
時間就是一把殺豬刀,歲月更是毫不留情的在我英俊的臉上留下痕跡!恨呀,這就開始了我的社會之旅。2015年上海,在拉鉤網中投遍了IOS實習崗,兩家面試!在面試中受到的打擊著實不清呀,其中心酸就不一一道來了。在學校時候學的不認真,學習的時候又沒有筆記,知識在又沒有實際的項目實踐,最后的結果就是什么都知道都聽過,但是具體的什么都說不出來!所以毅然決然的決定投身于寫博客的大隊伍中,與各位共勉。
(PS:既然是社會之旅,除了技術的敲門磚,當然還有就是做人了!我只能說我被HR給刷過)
漫漫談(Process and Thread)
作為資深的菜鳥級應屆畢業生,我向大家承若本文包括以后的所有文章都將是“原創”------那是不可能的,是原創加借鑒啦~~(其實就是“抄襲了”,我相信寫過畢業論文的童鞋們都身+“深”有體會!)
首先來談談 process(傳說中的進程) and thread(傳說中的線程),不知道大家有沒有發現中文的進程與線程是很有迷惑性(TMD就一字之差),但是當你洋氣的用 process and thread to read them 你就會問“他們”之間有半毛錢關系嗎,確實有點關系的!只能說大english確實很有意思的,英語不行的”鳥“兒們該向我們大english妥協了,因為所有新的技術一開始都是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運行(執行)的實例
Thread (線程):A thread is a path of execution within a process.
線程是進程中的一條運行(執行)路徑。
看到這里我就有點像吐槽下教科書神馬的了,天書呀有木有!讀者們,別罵我從洋媚外。
一個App啟動或者說運行的時候,就會在Operation System(操作系統)中創建一個process,是windows的同學打開你的 the task manager(任務管理器)看下你早已運行的QQ是有多少個processes? 有多少Threads? 用mac的同學打開你們的Activity Monitor,本人用的是mac503 五年前的產品了,附圖如下:
大家看我們的大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、由于創建process(進程)需要分配一個片單獨的地址空間(或者說內存空間),而thread是進程中執行的路徑,線程使用的地址空間(內存空間)就是process(進程)的空間,不需要額外消耗內存創建線程。所以說線程的創建比進程容易。
2、原文翻譯:由于線程之間共享同一數據結構,在同一時間里只能由一個線程對數據結構進行修改,因此多線程編程需要非常小心,而對于進程就不要擔心了,因為進程之間都有各自獨立的地址空間。
見解:由于線程之間是共享同一數據結構的,所以一旦線程很多,那么就會出現線程對同一數據修改的混亂問題。所以在多線程編程時一定要思路清晰。
3、原文翻譯:線程被認為是輕量級的,因為線程所需的資源比進程少的多。
見解:在文章的原文有一句這樣子的話,我也挺認同的:It’s important to note that a thread can do anything a process can do. 意思是:很有必要指出線程可以做到進程可以做的任何東西。我們可以這樣理解,進程就是悟空,線程就是就是悟空的分身了。悟空的分身可以干悟空能干的事情,但是分身就是分身實力有限,所以可以被認為是輕量級的;而悟空本人就牛逼多了,所以被認為是重量級的(heavyweight)。
4、原文翻譯:進程之間是相互獨立的,而線程之間由于分享的是同一地址空間所以是線程之間是不獨立的。所以一定要小心線程之間的“互踩”(同時對一個對象進行操作)。
5、原文翻譯:一個進程可以由多個線程組成。
ps:第一次寫博文,不好之處歡迎吐槽!由于操作系統知識忘的差不多了,改天一定把補上!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。