精华内容
下载资源
问答
  • 多线程优缺点

    2016-10-09 17:36:18
    多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:  (1)多线程技术使程序的响应速度更快...

    何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。


    多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能: 


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

    (2)当前没有进行处理的任务时可以将处理器时间让给其它任务;

    (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;

    (4)可以随时停止任务;

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

     是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理: 
    (1)耗时或大量占用处理器的任务阻塞用户界面操作;

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


    同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括: 


    (1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。

    (2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。

    (3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。

    (4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

    展开全文
  • 本篇主要讲的是多线程并发优缺点,包括执行IO密集型任务和计算型密集任务时分别使用串行和并发来看CPU的使用效率。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!01:问题引入为何需要...

    本篇主要讲的是多线程并发优缺点,包括执行IO密集型任务和计算型密集任务时分别使用串行和并发来看CPU的使用效率。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!

    01:问题引入

    为何需要多线程?

    要把100M数据写入磁盘,CPU计算的时间只需要0.01s,可是磁盘接受这100M数据却需要10s。

    怎么办呢?有以下两种办法

    第一种办法是CPU等着,也就是程序暂停执行后续代码,直到磁盘写入数据完成再继续往下执行

    第二种办法是CPU告诉磁盘:“您老人家慢慢写,我去做别的事情了”

    02:IO型密集任务

    1)概述:指磁盘IO、网络IO占主要的任务,计算量很小。

    2)特点:有大量的等待时间。CPU消耗很少,任务的大部分时间都在等待IO操作完成。

    3)注意:在Python中可以利用sleep达到IO密集型任务的目的。

    03:串行执行IO型密集任务

    import time,threading

    begin_time=time.time()

    def foo(something):

    print(something)

    time.sleep(2)

    #串行执行IO型密集任务

    foo('磁盘接收100M数据')

    foo('CPU执行其他任务!')

    end_time=time.time()

    #打印主线程运行时间

    print('共计消耗时长为:',end_time-begin_time)#4s

    04:多线程并发执行IO型密集任务

    import time,threading

    begin_time=time.time()

    def foo(something):

    print(something)

    time.sleep(2)

    #多线程并发执行IO型密集任务

    t1=threading.Thread(target=foo,args=('磁盘接收100M数据',))

    t2=threading.Thread(target=foo,args=('CPU执行其他任务!',))

    t1.start()

    t2.start()

    t1.join()

    t2.join()

    end_time=time.time()

    print('共计消耗时长为:',end_time-begin_time)#2s

    05:多进程并发执行IO型密集任务

    import time

    from multiprocessing import Process

    begin_time=time.time()

    def foo(something):

    print(something)

    time.sleep(2)

    #多进程并发执行IO型密集任务

    if __name__ == '__main__':

    t1=Process(target=foo,args=('磁盘接收100M数据',))

    t2=Process(target=foo,args=('CPU执行其他任务!',))

    t1.start()

    t2.start()

    t1.join()

    t2.join()

    end_time=time.time()

    print('共计消耗时长为:',end_time-begin_time)#2.20212s

    06:计算型密集任务

    1)概述:指CPU计算占主要的任务,CPU一直处于满负荷状态。

    2)特点:一直在执行没有等待时间。要进行大量的计算,消耗CPU资源。

    07:串行执行计算型密集任务

    import time,threading

    begin_time=time.time()

    def bar():

    num=0

    for i in range(100000000):

    num+=1

    #串行执行计算型密集任务

    bar()

    bar()

    end_time=time.time()

    print('共计消耗时长为:',end_time-begin_time)#14.5928s

    08:多线程并发执行计算型密集任务

    import time,threading

    begin_time=time.time()

    def bar():

    num=0

    for i in range(100000000):

    num+=1

    #多线程并发执行计算型密集任务

    t1=threading.Thread(target=bar)

    t2=threading.Thread(target=bar)

    t1.start()

    t2.start()

    t1.join()

    t2.join()

    end_time=time.time()

    print('共计消耗时长为:',end_time-begin_time)#14.3198s

    09:多进程并发执行计算型密集任务

    import time

    from multiprocessing import Process

    begin_time=time.time()

    def bar():

    num=0

    for i in range(100000000):

    num+=1

    #多进程并发执行计算型密集任务

    if __name__ == '__main__':

    t1=Process(target=bar)

    t2=Process(target=bar)

    t1.start()

    t2.start()

    t1.join()

    t2.join()

    end_time=time.time()

    print('共计消耗时长为:',end_time-begin_time)#9.6735s

    10:总结

    1)多线程并发优点:在执行IO密集型任务时,某个任务阻塞的时候CPU会切换到其他任务就大大提高了CPU的使用效率。

    2)多线程并发缺点:在执行计算密集型任务时,CPU一直在计算没有休息。因此python多线程并发并不能显著提高效率,但是使用多进程执行效率有所提升。

    展开全文
  • 多线程:多线程优缺点、应用场景

    千次阅读 2019-03-10 23:35:25
    首先说下多线程出现的原因: 为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作(IO密集时,cpu利用率会下降)时或处理的情况需要...

    首先说下多线程出现的原因:

    为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作(IO密集时,cpu利用率会下降)时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等

    多线程的好处:

    0.提高CPU的利用率。从磁盘上读取文件的时候,大多数的CPU时间都会花费在等待磁盘来读取数据。在这个时候CPU是相当空闲的。在这个时候它可以干点别的事情。通过改变操作的顺序,CPU可以得到更好的利用。

    1.防止阻塞主线程,提高吞吐量。使用线程可以把占据时间长的程序中的任务放到后台去处理

    2.程序的运行效率可能会提高,提升程序的响应速度。

     

    多线程的缺点:

    1.如果有大量的线程,会影响性能,因为线程的创建、切换、销毁都比较消耗系统资源。

    2.更多的线程需要更多的内存空间。


    3.线程中止需要考虑对程序运行的影响.

    4.通常块模型数据是在多个线程间共享的,需要防止线程安全问题、线程死锁情况的发生
     

    多线程应用场景:

    多线程最多的场景:web服务器本身;各种专用服务器(如游戏服务器);多线程的常见应用场景:

    1、后台任务,例如:定时向大量(100w以上)的用户发送邮件;

    2、异步处理,例如:发微博、记录日志等;

    3、分布式计算

    展开全文
  • 同步还是异步,单线程还是多线程是我们软件开发中经常面临的设计选择,只有准确的区分它们之间的优缺点,才能根据我们的实际应用场景作出正确选择。它们两两组合一共有四种模式,下面就我自己的理解做一些总结分析。...

    同步还是异步,单线程还是多线程是我们软件开发中经常面临的设计选择,只有准确的区分它们之间的优缺点,才能根据我们的实际应用场景作出正确选择。它们两两组合一共有四种模式,下面就我自己的理解做一些总结分析。

    1、同步单线程模式

    优点:a)实现简单。b)不用考虑线程间同步互斥问题。

    缺点:a)对CPU的使用率不高(容易在进行IO操作或自身等待操作时阻塞),在多CPU时劣势更明显。b)并发性不好,在有的事件需要长时间占用CPU处理的情况下,其他事件会长时间等待得不到处理。

    2、同步多线程模式

    优点:a)对CPU的使用率较高,在多CPU时优势更明显。b)并发性好,各线程都能根据优先级得到执行。

    缺点:a)需要考虑线程间同步互斥问题。b)实现较复杂,不同线程的业务步骤有相互依赖时,需要分解实现成状态机及事件通知驱动模式(或者轮询模式)。

    3、异步多线程模式

    优点:a)对CPU的使用率高,在多CPU时优势更明显。b)并发性好,各线程都能根据优先级得到执行。

    缺点:a)需要考虑线程间同步互斥问题。b)实现复杂,要把所有会导致阻塞的操作转化为异步操作,另外不同线程的业务步骤有相互依赖时,需要分解实现成状态机及事件通知驱动模式(或者轮询模式)。

    4、异步单线程模式

    优点:a)对CPU的使用率高。b)不用考虑线程间同步互斥问题。

    缺点:a)实现较复杂,要把所有会导致阻塞的操作转化为异步操作。b)并发性不好,在有的事件需要长时间占用CPU处理的情况下,其他事件会长时间等待得不到处理。c)在多CPU时不如多线程高效。

    简单的说:同步实现简单但是CPU利用率低,异步实现复杂但是CPU利用率高。

    单线程不用考虑互斥但是并发性、多CPU利用率低,多线程需要考虑互斥但是并发性、多CPU利用率高。

    展开全文
  • StringBuilder 线程不安全 快 StringBuffer 线程安全 慢
  • 线程是进程中的实体,一个进程可以拥有线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现...
  • 同步还是异步,单线程还是多线程是我们软件开发中经常面临的设计选择,只有准确的区分它们之间的优缺点,才能根据我们的实际应用场景作出正确选择。它们两两组合一共有四种模式,下面就我自己的理解做一些总结分析。...
  • Python中多线程与多进程的区别Multiprocessing V.S. Threading摘要如果你不想读整篇文章,这里有你所需要的本文精华:如果你的程序运行效率瓶颈在于网络传输时延,那么你可以使用多线程。如果你的程序运行效率瓶颈...
  • 匿名用户1级2016-06-22 回答作者:yegle链接:...简单地说就是作为可能是仅有的支持多线程的解释型语言(perl的多线程是残疾,PHP没有多线程),Python的多线程是有compromise的,在任意时...
  • PHP 多历程和多线程优缺点多历程1.运用多历程, 子历程完毕今后, 内核会担任接纳资本2.运用多历程, 子历程非常退出不会致使全部历程Thread退出. 父历程另有时机重修流程.3.一个常驻主历程, 只担任使命分发, 逻辑更...
  • 多线程 一、线程概述 四、线程常用方法 多线程 一、线程概述 1. 进程 正在执行的应用程序(java.exe),一个可执行的程序一次运行的过程 独立性:不同进程之间相互独立 动态性:是一直活动的 并发性:多个...
  • 原标题:python多线程是大家所说的鸡肋吗?看过这篇就知道了! 为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行...
  • Properties 属性列表中的每个键及其对应的值都是一个字符串。 Properties可以保存到流中或从流中加载。 作为配置文件使用: 1....键值对的数据,默认都是字符串 ... 通过Properties实现软编码 Properties作为配置文件...
  • 多线程 线程池优缺点

    2020-06-12 21:53:57
    使用多线程优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同时执行)。 2)适当的提高了资源利用率(CPU、内存等)。 缺点: 1)占用一定的内存空间。 2)线程越多CPU的调度开销越大。 3)程序的复杂度会...
  • 多线程优缺点

    2019-04-18 11:44:40
    多线程优缺点 何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立...
  • 线程优缺点

    2018-10-04 07:36:09
    1,线程是一种非常“节俭”的任务处理方式,不必分配独立的独立的地址空间,切换时间也远远小于进程 2,同一进程下的线程共享同一数据空间,所以一个线程的数据可以直接为其他数据所用,方便又快捷 3,使cpu更...
  • 单线程和多线程优缺点

    千次阅读 2018-08-23 12:58:55
    单线程和多线程优缺点   单线程和多线程优缺点 多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的...
  • 多进程与多线程优缺点

    千次阅读 2015-08-11 13:59:43
    比较多进程与多线程优缺点

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,359
精华内容 943
关键字:

多线程优缺点