精华内容
下载资源
问答
  • 2020-02-02 14:49:19

    多线程是指:在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。
    多线程和多任务的区别:多任务是针对操作系统而言的,代表操作系统可以同时执行的程序个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程的个数,每个线程完成不同的任务。

    更多相关内容
  • 多任务多线程

    千次阅读 热门讨论 2017-12-03 13:50:17
    对于这个概念,有好多不理解的概念,首先就是多任务多线程,那么到底什么是多任务多线程呢?通过各种查阅,下面说一下我的简单理解。多任务多任务指的是一台电脑上可同时运行多个应用程序(也叫多个进程),是一...

    ##前言
    Linux系统是UNIX操作系统的克隆版,是Unix的开源实现,即是一个多使用者,多任务,多层次,多线程的操作系统。对于这个概念,有好多不理解的概念,首先就是多任务与多线程,那么到底什么是多任务与多线程呢?通过各种查阅,下面说一下我的简单理解。

    ##多任务
    多任务指的是一台电脑上可同时运行多个应用程序(也叫多个进程),是一种多个任务共享处理资源(如CPU)的方法。

    只有在多操作系统上才能执行多任务操作,那什么才是多操作系统呢?在这里先不充一下单核和多核的区别。

    ###单核与多核
    单核就是CPU集成了一个运算核心,电脑的所有运行都是由这一个核来完成的,即同一时间只能完成一项任务。
    多核就是CPU集成了多个运算核心,可以同一时间可以完成多个任务,将任务分配给不同的核同时进行,相对于单核来说,多核处理任务的时间就会更短。

    单核是支持多任务操作系统的,但并不是真正的并发执行,就像我们不能吃饭和唱歌同时进行一样,但是我们可以在一小段时间内先吃饭在唱歌,再吃饭再唱歌,这样在一个固定的时间段内就实现了边吃饭边唱歌这件事情。单核处理的情况和这个类似,他通过多任务通过调度(Scheduling)哪一项任务在哪一时刻运行以及何时切换到另一项任务,从而实现了多任务操作。
    多核也是支持多任务操作系统的,并且实现了真正的并发执行,针对不同的任务,多个计算引擎独立地工作.

    ##多线程
    多线程是将多任务的思想拓展到应用,因此,您可以将单个任务中的特定步骤进一步分解成一个个小任务,再将这些任务分配给不同的CPU内核(对于单核的CPU只要进行每个任务在短时间内的切换),每个任务可以并行运行,即多个线程并行的运行。举个例子,一个进程做整数1,2,3,。。N连续相加,可以用一个线程(一个cpu内核)做奇数的加法,另一个线程(另一个cpu内核)做偶数的加法,这样整个进程的速度会提高2倍。

    以上只是经过百度后的简单个人理解,可能存在不准确的地方,有什么问题欢迎一起讨论。下面在附一张导图

    这里写图片描述

    展开全文
  • 第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程第二章多任务和多线程...
  • 多任务多线程和多进程的区别

    万次阅读 多人点赞 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

    展开全文
  • 一、异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿,...

    一、异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿,不用干等着这个耗时操作返回。.Net中的这种异步编程模型,就简化了多线程编程,我们甚至都不用去关心Thread类,就可以做一个异步操作出来。

    二、随着拥有多个硬线程CPU(超线程、双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论。本文主要是想探讨一下如何使用并发来最大化程序的性能。

    多线程和异步操作的异同

    1. 相同点

    都可以达到避免 调用的线程 阻塞 的目的,提高软件的可响应性

    2. 异步操作的本质

    所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。DMA就是直 接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开 始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS 这样的单进程(而且无线程概念)系统中也同样可以发起异步的DMA操作。

    3.线程的本质

    线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度

    4. 异步操作的优缺点

    因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少 共享变量的数量),减少了死锁的可能。当然异步操作也并非完美无暇。
      
      编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与普通人的思维方式有些出入,而且难以调试。

    5.多线程的优缺点

    多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的缺点也同样明显,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。

    6. 适用范围

    在了解了线程与异步操作各自的优缺点之后,我们可以来探讨一下线程和异步的合理用途。我认为:当需要执行I/O操作时,使用异步操作比使用线程+同步 I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest等跨进程的调用。
      而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

    7.异步调用与多线程

    异步调用并不是要减少线程的开销, 它的主要目的是让调用方法的主线程不需要同步等待在这个函数调用上, 从而可以让主线程继续执行它下面的代码.与此同时, 系统会通过从ThreadPool中取一个线程来执行,帮助我们将我们要写/读的数据发送到网卡.由于不需要我们等待, 我们等于同时做了两件事情. 这个效果跟自己另外启动一个线程来执行等待方式的写操作是一样的.但是, 异步线程可以利用操作系统/.Net的线程池, 系统可以根据吞吐量动态的管理线程池的大小.

    异步与多线程,从辩证关系上来看,异步和多线程并不时一个同等关系,异步是目的,多线程只是我们实现异步的一个手段.什么是异步:异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回.实现异步可以采用多线程技术或则交给另外的进程来处理
    线程池的实现方法与线程是不一样的.初始化时在线程池里的线程为0.当进程需要一个线程时,创建一个线程,由此线程执行用户的方法.需要注意的是,此线程执行完后并不立即销毁,而是挂起等待,如果有其他方法需要执行,回唤醒进行处理.只有当它等到40秒(没有官方记录,有可能是其它数字)还没有任务执行时才唤醒自己,并销毁自己,释放资源.当然,如果线程池中的线程不够处理任务时,会再次创建一个新线程进行执行.

    异步有的时候用普通的线程,有的时候用系统的异步调用功能。有一些IO操作也是异步的,但是未必需要一个线程来运行。例如:硬件是有DMA功能的,在调用DMA传输数据的时候,CPU是不需要执行处理的,只需要发起传输和等待传输结束即可。具体到.net平台,比如Socket的BeginSend,如果是运行在Windows 2000以后的平台,在底层就会调用异步的完成端口来发送。

    .Net中的异步执行其实使用的是异步委托。异步委托将要执行的方法提交到.net的线程池,由线程池中的线程来执行异步方法。

    异步执行也得执行,不在当前线程执行,当然得去另外一个线程执行。异步通常用系统线程池的线程,通常情况下性能好些。(因为可以多次利用,申请时不需要重新申请一个线程,只需要从池里取就行了。)异步是一种效果,多线程是一种具体技术。可以说,用“多线程”实现“异步”。

    异步和多线程是两个不同的概念,不能这样比较.异步请求一般用在IO等耗时操作上,他的好处是函数调用立即返回,相应的工作线程立即返还给系统以供重用。由于系统的线程资源是非常宝贵的,通常有一定的数目限制,如.net默认是25。若使用异步方式,用这些固定数目的线程在固定的时间内就可以服务更多的请求,而如果用同步方式,那么每个请求都自始至终占用这一个线程,服务器可以同时服务的请求数就少了。当异步操作执行完成后,系统会从可用线程中选取一个执行回调程序,这时的这个线程可能是刚开始发出请求的那个线程,也可能是其他的线程,因为系统选取线程是随机的事情,所以不能说绝对不是刚开始的那个线程。多线程是用来并发的执行多个任务。

    不过有个问题,异步有时优先级比主线程还高。这个特点和多线程不同。

    原博主 https://blog.csdn.net/qq_36936155/article/details/78991050

    展开全文
  • 多线程-springboot实现多线程处理任务

    千次阅读 2021-01-06 11:16:30
    2.springboot实现多线程 1.在入口类上开启多线程 @SpringBootApplication //@EnableScheduling @EnableAsync public class SampleController { public static void main(String[] args) throws Exception { ...
  • java多线程执行任务(工具)

    千次阅读 2022-03-09 14:54:09
    在项目开发的过程中经常会碰到多线程执行任务,每次用线程池实现时,由于每次的需求都有所差别有时是所有任务同时执行有时是分批次执行有时还需要知道所有任务什么时候执行完。今天闲着写了一个通用的多线程执行工具...
  • 如果让不同的线程执行不同的任务,并且每个线程任务的数量也不一样,还可以自由的添加任何数量的任务,那么下面的教程解决了这个问题,包括多线程分配单个不同的任务多线程分配多个不同的任务,让每个线程根据游戏...
  • java多线程执行任务(工具升级版)

    千次阅读 2022-03-10 16:17:59
    昨天写的java多线程执行任务(工具)但是不能符合顺序执行计划的场景,下面升级一下原工具 [java多线程执行任务(工具)]: https://haohaoding.blog.csdn.net/article/details/123377795
  • 定时任务使用多线程注意事项

    千次阅读 2021-03-22 18:08:17
    在定时任务中为了加快处理速度,一般都会使用多线程处理业务。需要注意一下事项:1. 定时任务是否允许上一个定时任务未结束,下一个定时任务可以启动,通过Scheduled中的配置在决定。2. 主线程已经关闭,线程池中的...
  • 几乎所有的大型系统都有一个多任务多线程处理内核。本程序提供了一个多任务多线程异步处理框架。该框架使用简单,用户只需要继承抽象类Task,构建自己的任务类,再构造一个任务源,就可以轻松使用这个框架。 程序包...
  • python中的多任务-多线程和多进程

    千次阅读 多人点赞 2019-03-10 11:12:29
    多线程和多进程都是实现多任务的一种方式,但是对于很多初学者来说想分清楚他们往往是一件非常头疼的事,首先我们需要了解多任务的概念。 所谓的多任务就是在同一时刻同时做很多事情,比如我们一边使用浏览器...
  • Android后台多任务多线程断点下载

    热门讨论 2014-10-15 18:13:22
    实现Android的后台多任务多线程断点下载,断点的数据保存在sqlite数据库中
  • Linux -- 多任务机制(任务、进程、线程)介绍

    千次阅读 多人点赞 2021-10-18 17:40:01
    多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务。 Linux就是一个支持多任务的操作系统,多任务操作系统使用...多任务操作系统中通常有3个基本概念:任务、进程、线程
  • 多线程多线程实现多任务

    千次阅读 2018-09-13 10:55:13
    今天主要说说多线程实现多任务 首先了解了解并行与并发: 并发:指任务数多于CPU核数,通过操作系统的各种任务调度算法,实现用多个任务一起执行,实际上总有一些任务不在执行,因为切换任...
  • 1、代码实现 # -*- coding:utf-8 -*- import os ...定时任务每 5 秒打印一次 :“hello : 666” 主线程任务每 10 秒打印一次当前时间 :“2020-09-02 14:52:28” 定时任务和多线程任务创建函数中都需要加 start() 方法.
  • Linux 系统同时可以支持个用户,...就像手机开了助手一样,同时登陆个 qq 账号,当硬件配置非常高时,每个用户还可以同时执行任务线程同时工作,提高效率。用户是 Linux 优于其他操作系统的一大特点。
  • 多线程并发并行的区别

    万次阅读 2020-09-13 14:35:34
    背景  对于java开发从业人员来说,并发编程是绕不开的话题,juc并发包下提供了一系列多线程场景解决方案。  随着jdk1.8的普及,多线程处理... 多线程并发并行的区别   2. parallelStream()并行滥用的后果   3
  • C#多线程下载文件工具,可添加多任务,带断点续传功能
  • 线程、进程、多线程、多进程 多任务 小结

    千次阅读 多人点赞 2019-04-20 11:59:56
    目录 1 进程 2 线程 3 多进程 4 多线程 5 线程与进程的关系 6 线程进程的区别 7 进程的优缺点 7.1 进程的优点 ...9 多线程的优缺点 ...9.1 多线程的优点 ...9.2 多线程的缺点 ...8 多任务(多进...
  • 多线程异步任务处理

    千次阅读 2018-11-07 21:29:31
    文章目录多线程异步任务处理线程池线程池的优缺点常用的线程池技术@Async注解源码   我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,那我们怎么去使用它呢?我们先来了解下什么是...
  • C语言多任务,多进程,多线程

    千次阅读 2018-04-03 15:44:08
    Linux就是一种支持多任务的操作系统,它支持多进程、多线程多任务处理任务之间的多种通信机制。Linux下多任务机制的介绍多任务处理是指用户在同一时间内运行多个应用程序,每个应用程序被称做一个任务。Linux...
  • springboot定时任务开启多线程

    千次阅读 2020-04-07 14:56:27
    在开发过程中避免不了要使用定时任务,例如:定时统计数据,上传数据等等。而springboot的定时任务Scheduled默认是单线程。所以当一个类中需要执行的定时方法过多是,任务就会排队,不...这时候就需要配置多线程了。...
  • 什么是进程,什么是线程,多线程与多进程的区别?什么是进程,什么是线程多线程与多进程的区别 什么是进程,什么是线程 什么是进程,什么是线程,以及...  首先明确多进程和多线程都能“同时实现多个任务”。假设要同
  • Java多线程超详细教程(1)

    千次阅读 2021-02-28 14:03:17
    多处理和多线程,都用于实现多任务处理。但是我们使用多线程而不是多处理,因为线程共享一个公共内存区域。 它们不分配单独的内存区域,因此节省了内存,并且线程之间的上下文切换花费的时间少于进程。Java多线程...
  • C# 任务和线程区别

    千次阅读 2020-01-15 11:23:58
    关于并发并行的区别,这里就不做介绍了,网上有很资料。 1、线程池 创建任务的基本原理是使用线程池,也就是说任务最终也是要交给线程去执行的。但是微软优化了任务的线程池,使线程的控制更加精准高效。...
  • 进程-线程-多线程 1、进程(process) 狭义定义:进程就是一段程序的执行过程 简单的来讲进程的概念主要有两点: 第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)...
  • python多线程完成多个任务

    千次阅读 2018-05-03 19:54:21
    # 线程: 线程可以理解成执行代码的分支, 线程是执行对应的代码的, cpu调度线程去执行对应代码 import time import threading # 跳舞的任务 def dance(): # 获取当前执行代码的线程 current_thread = threading...
  • 多线程和高并发的区别

    千次阅读 2019-05-29 11:20:09
    “高并发和多线程”总是被被一起提起,给人的感觉好像他们相等,其实 高并发 不等于 多线程 多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发的状态的实现。 高并发是...
  • C#多线程并行管理,通过Task实现,可对单个任务进行暂停,继续以及停止等操作,每个任务均有单独的进度条显示 同时执行的任务个数可以自行设置

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 742,930
精华内容 297,172
关键字:

多任务和多线程区别