精华内容
下载资源
问答
  • 现在的iOS是默认支持线程的,有些操作比较耗时,但这些耗时的线程不能阻塞主线程。因此需要在实现时,注意确保主线程的顺畅,及时响应用户的交互。1. 处理耗时的逻辑操作比如进行图像的压缩和裁剪等耗CPU或GPU的...

    现在的iOS是默认支持多线程的,有些操作比较耗时,但这些耗时的线程不能阻塞主线程。因此需要在实现时,注意确保主线程的顺畅,及时响应用户的交互。

    1. 处理耗时的逻辑操作

    比如进行图像的压缩和裁剪等耗CPU或GPU的操作时,可以将这些操作放在全局队列中异步执行:

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
           //complex logic operation 
    });

    函数原型为:

    dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

    async表明异步运行,block代表的是block操作任务,queue则是任务所处队列.

    2. 处理耗时的UI操作

    2.1 网络操作
    有些需要与网络交互的操作,在网络返回前需要显示一个loading的菊花,然后等待网络返回,这时可以使用回调来处理。
    比如:处理中的过程,定义为onProgressCallback回调,这个过程显示loading的tip窗口,禁止用户交互;
    处理完成,定义为completeCallback(错误或成功),隐藏tip,并给出提示,开启用户交互。
    2.2 等待前面UI操作
    另外,有时需要等待前面的UI操作完成,比如等待自动隐藏的提示tip 窗口关闭,再进行下一个UI操作,可以使用:

    // wait for 1.2 seconds
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 1.2), dispatch_get_main_queue(), ^{
        // show statusbar
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
    });

    的方法来进行。

    dispatch_after();

    方法表示延迟执行。

    DISPATCH_TIME_NOW
    //Indicates a time that occurs immediately.

    表示当前时间:

    dispatch_get_main_queue()

    获得主线程。

    展开全文
  • 本章节介绍如何使用FastFoots加速大数据表的读取引言分析如何将单个大数据表分解具体解决方案 引言 上一个章节我们讲了如何将FastFoots应用于多表读取,因为很简单想必大多数人都应该明白了,并能应用于实际的工作中...

    (一)引言

    上一个章节我们讲了如何将FastFoot应用于多表读取,因为很简单想必大多数人都应该明白了,并能应用于实际的工作中,但有的时候会遇到某张表数据比较大(几万,几十万甚至上百万),这样的数据表是不是用不了FastFoot,因为他不是需要建个任务列表么,这只有一个表怎么来建?

    (二)分析如何将单个大数据表分解

    有些人可能会联想到,如果我把这个表的数据分成块是不是就能用FastFoot进行快速的读取了,回答是肯定的,我们可以这样做。

    (三)具体解决方案

    做过后台管理系统的同学们都接触过列表页面的检索,在列表页面最常用的技术就是分页,那么我们是不是也可以用分页来实现数据读取任务的分解呢,答案想必不用我说大家也知道了。下面我介绍一下具体的实现过程。

    • 利用PageHelp组件建立分页列表(任务列表)
    // 设定分页件数
    int step = 1000;
    // 取得表数据的总件数
    int count = codeMapper.count("DM_BIG_TABLE");
    // 计算分页
    int pageNum = count % step == 0 ? count / step : count / step + 1;
    // 任务分解
    List<TablePageRequest> taskList = new ArrayList<>();
    for (int i = 1; i <= pageNum ; i++) {
        taskList.add(new TablePageRequest(i, step, tableName));
    }
    
    • TablePageRequest定义如下:
    public class TablePageRequest implements Serializable {
        private int page = 0;
        private int limit = 10;
        private String tableName;
    }
    
    • 创建function函数
    Function<TablePageRequest,Page<Code>> function = request -> {
        PageHelper.startPage(request.getPage(), request.getLimit(),false);
        return codeMapper.selectAllPage(request.getTableName());
    };
    
    • selectAllPage定义如下:
    Page<Code> selectAllPage(@Param("tableName")String tableName);
    ----------------------------------------------------------------------------------
    <select id="selectAllPage" parameterType="java.lang.String" resultType="BaseResultMap">
      select * from ${tableName}
    </select>
    
    • 最后就可以通过FastFoot执行了
    Map<TablePageRequest,Page<Code>> map = FastFoot.runTasks(taskList, function);
    

    (四)结论

    如果单表数据越大,使用FastFoot的优越性越明显,同时可以通过调整step和feet来测试哪种组合是最优的。

    展开全文
  • 线程异步任务处理

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

    @(多线程&&并发)

    多线程异步任务处理

    欢迎关注作者博客
    简书传送门


      我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,那我们怎么去使用它呢?我们先来了解下什么是线程池?

    线程池

      线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而,增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中并等待下一次分配任务。

    线程池的优缺点

    使用线程池管理线程的优点

    • 线程的创建和销毁由线程池维护,一个线程在完成任务后并不会立即销毁,而是由后续的任务复用这个线程,从而减少线程的创建和销毁,节约系统的开销
    • 线程池旨在线程的复用,这就可以节约我们用以往的方式创建线程和销毁所消耗的时间,减少线程频繁调度的开销,从而节约系统资源,提高系统吞吐量
    • 在执行大量异步任务时提高了性能
    • Java内置的一套ExecutorService线程池相关的api,可以更方便的控制线程的最大并发数、线程的定时任务、单线程的顺序执行等
    常用的线程池技术
    • Executors.newCacheThreadPool():可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务。
    • Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程。
    • Executors.newScheduledThreadPool(int n):创建一个定长线程池,支持定时及周期性任务执行。
    • Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

    @Async注解

      在Spring中,基于@Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。
      如何在Spring中启用@Async。基于Java配置的启用方式:

    @Configuration
    @EnableAsync
    public class ExecutorConfig {
    }
    

    源码

    配置类:

    /**
     * @program:
     * @description: 线程池配置类
     * @author: zhouzhixiang
     * @create: 2018-11-07 19:10
     */
    @Configuration
    @EnableAsync
    public class ExecutorConfig {
    
        @Bean
        public Executor asyncServiceExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            //配置核心线程数
            executor.setCorePoolSize(20);
            //配置最大线程数
            executor.setMaxPoolSize(20);
            //配置队列大小
            executor.setQueueCapacity(99999);
            //配置线程池中的线程的名称前缀
            executor.setThreadNamePrefix("async-service-");
            // rejection-policy:当pool已经达到max size的时候,如何处理新任务
            // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            //执行初始化
            executor.initialize();
            return executor;
        }
    }
    

    接口:

    /**
     * @program:
     * @description: 异步接口
     * @author: zhouzhixiang
     * @create: 2018-11-07 19:08
     */
    public interface AsyncService {
    
        public void testAsync();
    }
    

    实现类:

    /**
     * @program:
     * @description:
     * @author: zhouzhixiang
     * @create: 2018-11-07 19:08
     */
    @Service
    public class AsyncServiceImpl implements AsyncService {
    
        private static final Logger logger = LoggerFactory.getLogger(AsyncServiceImpl.class);
    
        @Override
        @Async("asyncServiceExecutor")
        public void testAsync() {
            try{
                Thread.sleep(10000);
                logger.info("start executeAsync");
                System.out.println("测试异步任务!");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            logger.info("end executeAsync");
        }
    }
    

    controller:

        @ApiOperation(value = "business-测试", notes = "business-测试")
        @PostMapping("test")
        public ServiceResponse test2(@RequestBody JSONObject jsonObject, HttpServletRequest req){
            businessService.test();
            ServiceResponse response = new ServiceResponse();
            response.setCode(200);
            response.setData("成功");
            return response;
        }
    

    控制台输出:
    image.png

    image.png

    image.png

    由下图可以看出,异步任务执行成功。
    想提升编码能力吗,扫码购买提升逼格!
    在这里插入图片描述

    欢迎加入Java猿社区
    扫码_搜索联合传播样式-标准色版.png

    展开全文
  • 一个简单的分阶段多任务处理实例

    千次阅读 2012-08-23 09:52:09
    我们经常需要处理一个很耗时的任务,一般只有其中几步是十分耗时的,此时我们想到的是线程来处理任务。但是往往我们不能简单地把整个任务弄成线程程序。如:文件的读取,文件的写入需要单线程处理(如果线程...
    1、概述
    我们经常需要处理一个很耗时的任务,一般只有其中几步是十分耗时的,此时我们想到的是多线程来处理此任务。但是往往我们不能简单地把整个任务弄成多线程程序。如:文件的读取,文件的写入需要单线程处理(如果多线程处理需要加锁,此时性能没有单线程快)。为了解决此类问题,此我们可以用到,生产者与消费者的模式。本质上是Staged Event Driven Architecture的原型。
    2、具体分析
    我们把中间数据存入中间的queue。大致流程如下:

    其中一部分如果比较耗时的话,我们可以用多个线程处理。
    3、例子,java代码实现
    我们把文件mid.txt中的一个个mid,查询数据库换成aliid,再写到另一个文件中,格式为:mid\taliid。
    其中查询数据库比较耗时,我们可以多弄一个线程来处理这个耗时的任务。(由于是io密集型的任务,我们可以采取大于CPU个数的线程处理)
    java实现注意几点:
    1. java.util.concurrent.BlockingQueue这个类是数据安全的,注意阻塞的写法。
    2. java.util.concurrent.ExecutorService注意线程是否完成


    展开全文
  • SpringBoot线程任务处理

    千次阅读 2019-03-01 08:56:47
    Spring-Boot中如何使用多线程处理任务 https://www.cnblogs.com/qindongliang/p/5808145.html 看到这个标题,相信不少人会感到疑惑,回忆你们自己的场景会发现,在Spring的项目中很少有使用多线程处理任务的,没错...
  • Spring-Boot中如何使用多线程处理任务

    万次阅读 2016-08-25 19:22:37
    看到这个标题,相信不少人会感到疑惑,回忆你们自己的场景会发现,在Spring的项目中很少有使用多线程处理任务的,没错,大多数时候我们都是使用Spring MVC开发的web项目,默认的Controller,Service,Dao组件的作用...
  • 线程基础:多任务处理(13)——Fork/Join框架(解决排序问题) 》) 1、工作过程概要 在开篇前,首先回答一个上篇文章中的一个问题。在上篇文章给出的第一个归并算法实例中提到,归并算法的算法效率和算法...
  • 什么多任务什么叫做进程?什么是线程?

    千次阅读 多人点赞 2017-01-24 09:27:57
    多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多任务的操作系统,比起单任务系统它的功能增强了许多。 当多任务操作系统使用某种任务调度策略允许两个或...
  • 自然语言处理相关技术任务简介

    千次阅读 2018-11-22 18:45:47
    自然语言处理(NLP)是人工智能的一个重要应用领域,由于本人主要研究方向为NLP,也由于最近学习的需要,特意搜罗资料,整理了一份简要的NLP的基本任务和研究方向,希望对大家有帮助。自然语言的发展: 一般认为1950 ...
  • 什么使用多线程技术

    千次阅读 2017-11-18 10:41:45
    什么使用多线程技术
  •  我们知道,不管在任何的语言或操作系统平台(Android系统也不例外),多线程、多进程和异步任务的相关技术地讨论都是永恒的话题,很多的开发需求都需要使用多线程及异步任务以便实现多任务的同时执行和灵活的用户...
  • C语言多任务,多进程,多线程

    千次阅读 2018-04-03 15:44:08
    Linux就是一种支持多任务的操作系统,它支持多进程、多线程等多任务处理和任务之间的多种通信机制。Linux下多任务机制的介绍多任务处理是指用户在同一时间内运行多个应用程序,每个应用程序被称做一个任务。Linux...
  • 什么情形下适合使用线程池技术

    千次阅读 2012-03-27 14:51:41
    主要特点就是使用与创建技术,将线程创建和销毁本身带来的开销分摊到具体任务上,任务执行次数越,则节省时间越。再有一个就是线程池采用与创建技术创建的线程池规模一般有一个上界,可以解决一些服务器无法同时...
  • 多任务学习

    万次阅读 多人点赞 2018-01-12 16:35:45
    多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习可理解为定义一个一个源领域source domain和一个目标领域(target domain),在source domain学习,并把学习到的知识迁移到target domain,提升...
  • 最近笔试面试过程中,遇到了很关于操作系统的问题(CPU用户抢占机制,何为软中断等),作为一名计算机科学与技术专业的学生,我也曾学习过微机原理、操作系统,可我却一度认为我是做Web的,我不要学这些计算机...
  • // 个JS按顺序注入 "js": ["js/jquery-1.8.3.js", "js/content-script.js"], // CSS的注入就要千万小心,因为一不小心就可能影响全局样式 "css": ["css/custom.css"], // 代码注入的时间,可选值:...
  • 多任务操作系统

    千次阅读 2019-10-27 12:06:08
    单用户单任务操作系统是指一台计算机同时只能有一个用户在使用...Windows多任务处理采用的是虚拟机技术,为每一个任务分配短暂的时间片轮流使用CPU。 多任务操作系统在宏观上是并行的,微观上是并发的。 多任务操...
  • 【转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树】引言在平时项目开发中难免会遇到...当你下次项目中又遇到一个网络请求,你又不得不重写异步耗时任务处理框架。出于避免开发者重复搬砖工作,G
  • 本篇博文是“Java秒杀系统实战系列文章”的第十一篇,本篇博文我们将借助定时任务调度组件来辅助“失效超时未支付的订单记录”的处理,用以解决上篇博文中采用“RabbitMQ死信队列失效处理超时未支付的订单”的瑕疵!...
  • 旨在将调度作业从业务系统中分离出来,降低或者是消除和业务系统的耦合度,进行高效异步任务处理,目前被广泛应用在阿里巴巴、淘宝、支付宝、京东、聚美、汽车之家、国美等很互联网企业的流程调度系统中。...
  • 网络及多任务

    千次阅读 2012-01-01 16:17:42
    原文:苹果参考库“Network and Multitasking”多任务是iOS4的关键特性。多任务允许你的应用在后台运行及挂起。对系统来说这是好事,但对你的应用来说会严重干扰其网络任务的执行。本文解释了在网络应用中如何处理...
  • 上文介绍了基于 @Async 注解的 异步调用编程,本文将继续引入 Spring Boot 的 WebAsyncTask 进行更灵活异步任务处理,包括 异步回调,超时处理 和 异常处理。 正文 1. 处理线程和异步线程 在开始下面的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 643,977
精华内容 257,590
关键字:

多任务处理使用什么技术