多线程好还是单线程好?单线程和多线程的区别 优缺点分析

电子常识

2585人已加入

描述

  摘要:如今单线程与多线程已经得到普遍运用,那么到底多线程好还是单线程好呢?单线程和多线程的区别又是什么呢?下面我们来看看它们的区别以及优缺点分析。

  一、单线程

  每个正在运行的程序(即进程),至少包括一个线程,这个线程叫主线程

  主线程在程序启动时被创建,用于执行main函数

  只有一个主线程的程序,称作单线程程序

  主线程负责执行程序的所有代码(UI展现以及刷新,网络请求,本地存储等等)。这些代码只能顺序执行,无法并发执行

  二、多线程

  拥有多个线程的程序,称作多线程程序。

  iOS允许用户自己开辟新的线程,相对于主线程来讲,这些线程,称为子线程

  可以根据需要开辟若干子线程

  子线程和主线程都是独立的运行单元,各自的执行互不影响,因此能够并发执行

  三、单线程与多线程的区别

  单线程程序:只有一个线程,代码顺序执行,容易出现代码阻塞(页面假死)

  多线程程序:有多个线程,线程间独立运行,能有效地避免代码阻塞,并且提高程序的运行性能

  注意:iOS中关于UI的添加和刷新必须在主线程中操作

  四、单线程与多线程的优缺点分析

  多线程优缺点:

  同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。多线程处理可以同时运行多个过程。

  例如:文字处理器应用程序在您处理文档的同时,可以检查拼写(作为单独的任务)。由于多线程应用程序将程序划分成独立的任务,因此可以在以下方面显著提高性能:

  多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。

  当前没有进行处理的任务可以将处理器时间让给其他任务。

  占用大量处理时间的任务可以定期将处理器时间让给其他任务。

  可以随时停止任务。

  可以分别设置各个任务的优先级以优化性能。

  是否需要创建多线程应用程序取决于多个因素。在以下情况下,最适合采用多线程处理:

  耗时或大量占用处理器的任务阻塞用户界面操作。

  各个任务必须等待外部资源(如远程文件或 INTERNET 连接)。

  例如:用于跟踪 WEB 页上的链接并下载满足特定条件的文件的 INTERNET 应用程序“ROBOT”。这种应用程序可以依次同步下载各个文件,也可以使用多线程同时下载多个文件。多线程方法比同步方法的效率高很多,因为即使在某些线程中远程 WEB 服务器的响应非常慢,也可以下载文件。

  坏处:增加了调度和管理的开销,带来了一些不确定性,需要复杂的同步机制,避免死锁等等。

  好处:一定程度上提高响应速度,在多核的情况下还是更能充分利用CPU资源的。

  单线程优缺点:

  单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。

  由于时间片很短,这样给用户的感觉是同时有好多线程在执行。但是线程切换是有代价的,因此如果采用多进程,那么就需要将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的话,采用多线程技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。

  线程相对于进程的优点:

  1、开销小

  2、资源共享性好。

  线程相对于进程的缺点:

  1、共享资源需要耗费一定的锁资源,同步相对复杂。

  2、一个线程崩溃可能导致整个进程崩溃,这个当然是自己的应用程序有问题

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分