IOS 多线程漫漫谈(Process and Thread)

前言 

时间就是一把杀猪刀,岁月更是毫不留情的在我英俊的脸上留下痕迹!恨呀,这就开始了我的社会之旅。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:第一次写博文,不好之处欢迎吐槽!由于操作系统知识忘的差不多了,改天一定把补上!


本文出自 “9726972” 博客,请务必保留此出处http://9736972.blog.51cto.com/9726972/1620723

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。