专栏首页搜狗测试作为测试,如何理解线程同步异步

作为测试,如何理解线程同步异步

背景

日常测试中,程序加载数据文件,时常出现页面卡顿、程序无响应、程序崩溃等情况,排查发现与程序进程中线程的同步异步有关。

案例描述

问题描述: 使用文件查看器打开压缩文件时,出现程序无响应问题。 问题原因: 1、经排查发现,在文件查看器打开压缩文件时,会对压缩文件中所有资源进行遍历,在遍历过程中某个资源解析出错,导致任务阻塞。 2、进一步了解后发现,开发在实现功能时,将资源遍历线程放在了主线程中进行同步加载,所以资源遍历线程阻塞时,导致主线程无响应。 解决方案: 1、对资源遍历线程阻塞场景添加保护,保证遍历线程正常执行; 2、将资源遍历压缩文件线程从主线程放到子线程进行,形成异步加载,避免单个线程失败导致主线程直接挂掉,影响程序使用; 通过以上案例可以看出,逻辑实现中使用同步或异步线程,对程序的效率提升以及主线程的保护是非常重要的。

延伸思考

1、 开发层面对线程的使用: 1) 使用线程的场景: ① 移动APP程序模块需要加载框架+内容时,使用线程更为高效; ② 优化程序性能时,更偏向使用线程; 2) 线程同步异步在程序中的应用: ① 主线程在执行任务时,将异步任务在子线程中执行,主线程无需等待子线程的结果返回,完成主线程上的操作即可,等待子线程的结果返回后,再回调给到主线程,完成整个进程。这是线程的异步加载操作,这样可以提高执行的效率(如下图);

② 主线程在执行任务1时,需等待任务1响应完成后,才能开始任务2,如任务1阻塞,则整个进程不能进行,这样的同步线程对执行效率有很大的影响(如下图)。

2、线程对测试的影响: 1)线程对case设计的影响: ① 数据流加载类的功能。这类功能多为异步线程,可以从网络层面和加载量级层面考虑测试case的设计; ② JS注入类的功能。这类功能多为同步线程,可以从注入JS功能的生效性和JS注入时机考虑测试case的设计。 2)线程对程序性能的影响: ① 从安全和性能层面考虑,同步线程虽然解决了线程的安全问题,但每次都有判断锁,导致性能降低; ② 相对同步线程来说,异步线程对程序性能的影响是积极的,效率更高,一般APP程序中都建议使用异步线程,保证程序的效率。 注意:在安全与性能之间,首先考虑的是安全,其次是性能。

结束语

了解程序实现逻辑是测试工作中必不可少的,只有了解的更细更清楚,才能对测试方案有更全面的思考,从而保证产品质量。在此希望小伙伴们技术越来越棒,在软件测试这条路上越走越高! 下期文章:《线程处理之JS注入常规测试点》

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:lingzi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件

    2018-12-22 07:50

    walterlv
  • 【面试宝典】Java 如何进行线程同步?

    面试官:知道线程的同步吗? 小白:知道,线程的同步就是保证多个线程的共同资源在同一时刻只有一个线程在使用和修改,保证数据的唯一和准确。 面试官:那么如何保证数据...

    程序员互动联盟
  • java中同步synchronized的意义,如何用它解决线程不安全的问题

    从上节我们学到,当多个线程访问且更改同一个变量 时,很容易出现线程安全问题,诚然,我们可以通过一些其他手段,比如局部变量,多个实例,调整程序结构来解决线程安全问...

    马克java社区
  • 面试官问:多线程同步内部如何实现的,你知道怎么回答吗?

    线程同步可以说在日常开发中是用的很多, 但对于其内部如何实现的,一般人可能知道的并不多。 本篇文章将从如何实现简单的锁开始,介绍linux中的锁实现futex的...

    李红
  • 每日一题:如何实现异步任务处理来解决耗时操作问题

    今天说一个在实际项目中特别实用的解决并发耗时问题的办法:异步任务处理。这里采用 redis list 结构来实现。涉及知识点: 1、redis list 结构 ...

    用户7685359
  • FunTester原创文章(基础篇)

    FunTester
  • .NET基础拾遗(5)多线程开发基础

      下面的一些基本概念可能和.NET的联系并不大,但对于掌握.NET中的多线程开发来说却十分重要。我们在开始尝试多线程开发前,应该对这些基础知识有所掌握,并且能...

    Edison Zhou
  • 多线程开发编程总结

    这段时间,抽时间学习了下多线程编程,对线程的基本使用,到线程的同步、线程之间进行通信、JDK线程工具类的使用、单例模式与线程的结合进行了一个总结与思考

    AI码师
  • 聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿(task)之 三 异步取消和异步方法聊聊多线程那一些事儿 之 四 经典应用(取与舍、动态创建)聊聊多线程那一些事儿(ta

      hello,咋们又见面啦,通过前面两篇文章的介绍,对task的创建、运行、阻塞、同步、延续操作等都有了很好的认识和使用,结合实际的场景介绍,这样一来在实际...

    小小许

扫码关注云+社区

领取腾讯云代金券