精华内容
下载资源
问答
  • 多任务多线程和多进程的区别

    万次阅读 多人点赞 2019-04-26 14:22:22
    多任务中 多线程和多线程区别

    多任务中 多线程和多进程的区别

    首先来说下为什么要实现多任务,众所周知,程序执行的时候都是自上而下的运行的,然而随着代码量的增加,执行单一任务的效率会非常差。就好比你以前都是先做完语文作业,再做数学作业,然后再做英语作业,那有没有一种方法,类似于分身术一般,在做语文作业的同时,把数学作业和英语作业一起做了。这就是多任务的实现。多任务,打破了原来从上而下的规规矩矩的执行方式。能帮助你在同一时间执行多种任务。

    多进程

    进程其实是资源的分配的单位,包括代码、内存、CPU等等,多进程类似程序的多开,比如qq的多开。
    下面是一个简单的多进程的创建,我们可以看到在main函数下创建了两个子进程。

    import multiprocessing
    import time
    
    def test1():
        while True:
            print('--- this is process 1 ---')
            time.sleep(2)
    def test2():
        while True:
            print('--- this is process 2 ---')
            time.sleep(2)
    
    def main():
        t1 = multiprocessing.Process(target=test1)
        t2 = multiprocessing.Process(target=test2)
        t1.start()
        t2.start()
    

    下图解释了多进程工作的原理,在主进程下,子进程1和子进程2分别复制了主进程的代码以及资源,而子进程1则只运行test1这个函数,子进程2则只运行test2这个函数,进程之间的全局变量互不影响,对资源的开销比较大。

    在这里插入图片描述打开任务管理器,结束任意子进程,发现主进程和子进程2没有受到影响,仍然继续运行,而当我们结束主进程的时候,所有子进程全部结束。
    在这里插入图片描述在这里插入图片描述

    多线程

    在一个进程中我们也可以使用多任务,这就是线程,线程其实是操作系统资源调度的单位。多线程可以共享全局变量。
    下面是一个简单的使用方法来创建多线程的例子。

    import threading
    import time
    
    
    num = 100
    
    def test1():
        global num
        num += 1
        print('-----子线程1---num=%d' % num)
    
    
    def test2():
        print('-----子线程2---num=%d' % num)
    
    
    def main():
        t1 = threading.Thread(target=test1)
        t2 = threading.Thread(target=test2)
    
        t1.start()
        time.sleep(1)
    
        t2.start()
        time.sleep(1)
    
        print('-----main进程---num=%d' % num)
    
    if __name__ == '__main__':
        main()
    

    多线程并不会复制主进程的代码和资源,而是共享全局变量,相比多进程来说,资源开销更加小。在同一时间,子线程1和子线程2同时运行,实现多任务,而他们会共享全局变量num,所以print的值都是101.
    在这里插入图片描述

    多进程多线程的区别和选择(总结)

    关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。

    经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。

    我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受)。

    在这里插入图片描述
    在这里插入图片描述1)需要频繁创建销毁的优先用线程

    原因请看上面的对比。

    这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的

    2)需要进行大量计算的优先使用线程

    所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。

    这种原则最常见的是图像处理、算法处理。

    3)强相关的处理用线程,弱相关的处理用进程

    什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。

    一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。

    当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。

    4)可能要扩展到多机分布的用进程,多核分布的用线程

    原因请看上面对比。

    5)都满足需求的情况下,用你最熟悉、最拿手的方式

    至于“数据共享、同步”、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,我只能说:没有明确的选择方法。但我可以告诉你一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。

    需要提醒的是:虽然我给了这么多的选择原则,但实际应用中基本上都是“进程+线程”的结合方式,千万不要真的陷入一种非此即彼的误区。
    消耗资源:

    从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

    线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。
    此段转载自https://blog.csdn.net/yu876876/article/details/82810178

    展开全文
  • 线程池处理多线程任务注意点In this tutorial you will learn about difference between multiprogramming, ... 在本教程中,您将了解多编程,多任务,多处理和多线程之间的区别。 Although these terms seems ...

    线程池处理多线程任务注意点

    In this tutorial you will learn about difference between multiprogramming, multitasking, multiprocessing and multithreading.

    在本教程中,您将了解多编程,多任务,多处理和多线程之间的区别。

    Although these terms seems similar but there are some differences between them which are given below.

    尽管这些术语看起来很相似,但是它们之间有一些区别,如下所示。

    多程序 (Multiprogramming)

    Multiprogramming is also the ability of an operating system to execute more than one program on a single processor machine. More than one task/program/job/process can reside into the main memory at one point of time. A computer running excel and firefox browser simultaneously is an example of multiprogramming.
    多程序编程也是操作系统在单处理器计算机上执行多个程序的能力。 一个时间点可以将多个任务/程序/作业/过程驻留到主存储器中。 同时运行excel和firefox浏览器的计算机是多程序编程的示例。
    Multiprogramming
    Memory layout for Multiprogramming System
    多程序系统的内存布局

    多任务 (Multitasking)

    Multitasking is the ability of an operating system to execute more than one task simultaneously on a single processor machine. Though we say so but in reality no two tasks on a single processor machine can be executed at the same time. Actually CPU switches from one task to the next task so quickly that appears as if all the tasks are executing at the same time. More than one task/program/job/process can reside into the same CPU at one point of time.

    多任务是操作系统在单处理器计算机上同时执行多个任务的能力。 尽管我们这么说,但实际上在同一处理器计算机上不能同时执行两个任务。 实际上,CPU从一个任务切换到下一个任务的速度如此之快,似乎所有任务都在同时执行。 同一时刻同一CPU可以驻留多个任务/程序/作业/进程。

    Multitasking
    Multitasking System
    多任务处理系统

    多处理 (Multiprocessing)

    Multiprocessing is the ability of an operating system to execute more than one process simultaneously on a multi processor machine. In this, a computer uses more than one CPU at a time.

    多处理是操作系统在多处理器计算机上同时执行多个进程的能力。 在这种情况下,一台计算机一次使用多个CPU。

    Multiprocessing
    Multiprocessing System
    多处理系统

    多线程 (Multithreading)

    Multithreading is the ability of an operating system to execute the different parts of a program called threads at the same time. Threads are the light wait processes which are independent part of a process or program. In multithreading system, more than one threads are executed parallely on a single CPU.

    多线程是操作系统同时执行称为线程的程序的不同部分的能力。 线程是轻等待进程,它们是进程或程序的独立部分。 在多线程系统中,在单个CPU上并行执行多个线程。

    Image Credits: TutorialsPoint, National Instruments

    图片来源: TutorialsPointNational Instruments

    翻译自: https://www.thecrazyprogrammer.com/2014/12/difference-between-multiprogramming-multitasking-multiprocessing-multithreading.html

    线程池处理多线程任务注意点

    展开全文
  • 线程,能够完成多任务,比如: 一个QQ中可以有多个聊天窗口 进程里面包含线程线程不能够独立执行,必须依存在进程中。 线程耗费的资源小, 进程耗费的资源大 线程是轻型进程 ,一个进程可拥有多个线程 进程...

    1. 进程、线程的对比

    1. 进程,能够完成多任务,比如:  一台电脑上可以运行登录多个QQ
      线程,能够完成多任务,比如: 一个QQ中可以和有多个聊天窗口
    2. 进程里面包含线程,线程不能够独立执行,必须依存在进程中。
    3. 线程耗费的资源小,  进程耗费的资源大
    4. 线程是轻型进程   ,一个进程可拥有多个线程 
    5.  进程之间是互相独立的,  线程之间是共享的

    2.关系对比

    1. 线程是依附在进程里面的,没有进程就没有线程。
    2. 一个进程默认提供一个线程,进程可以创建多个线程
    3. 进程里面包含着线程

    3.区别对比

    1. 进程之间不共享全局变量
    2. 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法:互斥锁或者线程同步
    3. 创建进程的资源开销要比创建线程的资源开销要大
    4. 进程是操作系统的资源分配的基本单位,线程是CPU调度的基本单位
    5. 线程不能够独立执行,必须依存在进程中
    6. 多线程开发比单进程多进程开发稳定性要强

    4.优缺点对比

    1. 进程优缺点:
      优点:可以使用多核
      缺点:资源开销大
    2. 线程优缺点:
      优点:资源开销小
      缺点:不能使用多核
    展开全文
  • ## 定时任务默认单线程,多线程和异步方法的区别 springboot @schedule@Async定时任务的异步 同步 多任务并发

    ## 定时任务默认单线程,多线程和异步方法的区别

    springboot @schedule和@Async定时任务的异步 同步 多任务并发

    展开全文
  • 异步任务和多线程区别

    千次阅读 2017-02-13 22:52:37
    1. 相同点都可以达到避免 调用的线程 阻塞 的目的,提高软件的可响应性2. 异步操作的本质所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件...
  • 1.进程是系统进行资源分配调度的一个独立单位,而线程则是进程的一个实体。是CPU调度分派的基本单位,它是比进程...2.进程与线程区别 一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于...
  • 一、异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿,...
  • 关于多任务: 并发(任务数 > cpu核数):假的多任务,通过时间片旋转或优先级调度,让程序切换的速度足够快,使人产生在同时运行多个任务的假象 并行(cpu核数 >= 任务数):真的多任务,每一个cpu都各自运行...
  • 1、进程、线程、服务和任务区别 进程(process),是指运行中的应用程序,每一个进程都有自己独立的内存空间。一个应用程序可以同时启动个进程。例如对于IE浏览器程序,每打开一个IE浏览器窗口,就启动了一个...
  • 1、说说轮巡任务调度与抢占式任务调度的区别? 答:轮询任务调度与抢占式任务调度的区别在于...2当软件线程个数超过硬件线程个数的时候,支持抢占式多任务处理的操作系统一般会采用时间片轮转调度的方案。 3 对于RTO
  • C# 任务和线程区别

    2020-01-15 11:23:58
    关于并发并行的区别,这里就不做介绍了,网上有很资料。 1、线程池 创建任务的基本原理是使用线程池,也就是说任务最终也是要交给线程去执行的。但是微软优化了任务的线程池,使线程的控制更加精准高效。...
  • 只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程 这个老板为了提高生产率,想到3种办法: 在这条生产线上招些...
  • 多线程和多任务区别多任务是针对操作系统而言的,代表操作系统可以同时执行的程序个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程的个数,每个线程完成不同的任务。 ...
  • 多进程和多线程区别 1、频繁修改:需要频繁创建和销毁的优先使用多线程。 2、计算量:需要大量计算的优先使用多线程, 因为需要消耗大量CPU资源且切换频繁,所以多线程好一点。 3、相关性:任务间相关性比较强的用...
  • 线程、进程、多线程、多进程 多任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    目录 1 进程 2 线程 3 多进程 4 多线程 5 线程与进程的关系 6 线程进程的区别 7 进程的优缺点 7.1 进程的优点 ...9 多线程的优缺点 ...9.1 多线程的优点 ...9.2 多线程的缺点 ...8 多任务(多进...
  • 进程和线程区别: 1、一个程序至少有一个进程,一个进程至少有一个线程; 2、资源(内存、寄存器等)分配给进程,进程在执行过程拥有独立的内存空间,而同一进程下的所有线程共享所有资源,从而提高程序的运行效率...
  • 通常Java线程池执行的任务有两种类型,一种是不带返回值的Runnable, 另一种是带返回值的Callable。 对于不带返回值的任务通常我们不太关注任务是否执行结束以及结束后应该做做些什么,我们将任务提交给线程池, ...
  • 在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。 为了让进程完成一定的工作,进程必须至少包含一个线程。 进程,...
  • 进程和线程区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有线程,比如...与进程不同的是同类的线程共享进程的堆方法区资源,但每个线程有自己的程序计数器、虚拟...
  • 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序程序所使用到的内存系统资源。...多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务, 也...
  • 什么是线程: 多任务编程 运行过程 轻量级的进程 threading Thread() start() join() 线程属性 自定义线程类 2.3.4 线程同步互斥 线程通信方法: 线程间使用全局变量进行通信 共享资源争夺 共享资源:多个进程...
  • 单线程和多线程区别

    千次阅读 2019-05-22 22:33:21
    前端精髓每日为你推送假设业务场景中有一组互不相关的任务需要完成,现行的主流方法有以下两种。单线程串行依次执行。多线程并行完成。如果创建多线程的开销小于并行执行,那么多线程...
  • 1.线程执行器分离了任务的创建执行,通过使用执行器,只需要实现Runnable接口的对象,然后把这些对象发送给执行器即可。 2.使用线程池来提高程序的性能。当发送一个任务给执行器时,执行器会尝试使用线程池中的...
  • 我现在已经用QT的多线程方式完成了整个项目,但是被要求用进程。那么问题来了: 1:请问QT的多线程是不是可以理解成Linux下的多进程? 2:如果不是,那么请问Qt下怎么进行多进程编程?进程之间的通信同步互斥什么的...
  • 概述 每个进程都拥有自己的数据段、代码...更详情,请看《进程和线程区别与联系》。 就像每个进程都有一个进程号一样,每个线程也有一个线程号。进程号在整个系统中是唯一的,但线程号不同,线程号只在它所属的...
  • android 中 任务、进程和线程区别

    千次阅读 2016-07-03 22:40:12
    任务、进程和线程  关于Android中的组件应用,之前涉及,大都是静态的概念。而当一个应用运行起来,就难免会需要关心进程、线程这样的概念。在Android中,组件的动态运行,有一个最与众不同的概念,就是Task,...

空空如也

空空如也

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

多任务和多线程区别