多线程对单线程优化

多线程对单线程优化

软件中可用多线程而不用的时候,可能会造成不必要的时间和空间浪费,增加软件交互的响应时间,降低用户体验,对用户不友好。

培养自己多线程解决问题的思维方式。学习一门编程语言时,注重学习编程语言的多线程使用方式。使用编程语言时,有意识地使用多线程对业务逻辑进行优化,把软件的高效执行作为自己编程的一个基本要求,这个习惯可以让自己超过大量的程序员。

最近优化的一个简单的软件性能,队友在一个单线程中执行一个双层for循环,外层循环有20个元素,内层循环有4个元素,内层for循环中调用了一个失败超时时间为0.5秒、失败超时重试1次的方法。软件实际运行时,当内循环的第4个元素才满足要求时,内层for循环中超时方法已经执行了60次,耗时1分钟,用户体验极差。

这个问题报了一个Bug,队友解决问题的方式很奇葩,把内层循环的第4个元素改成内层循环的第1个元素,虽然解决了所测场景的问题,但是其他三个元素对应场景的耗时相应的增加了,相当于啥也没干,但是竟然奇迹般的通过了测试部测试,后来测试到其他场景时,发现问题依旧存在,问题又被打回了。

我有时间的时候看了队友的具体实现,发现双层for循环完全没必要使用单线程同步,可以使用多线程异步并发。双层for循环元素的积为80,同时新开80个线程很不划算,便使用线程池进行并发。现在所有的场景下耗时均在1秒左右,耗时由线性增加变成一个基本不变的常量,问题得到了解决。

BTW,多线程需要时应及时取消执行,避免多线程造成时间和空间浪费。上面的问题在多线程执行中有一个返回成功,其他的线程就可以取消。未启动的线程在刚启动时发现已有返回成功就应该结束;尝试进行失败超时重试线程发现已有返回成功也应该结束。实现高并发的同时,保障占用资源最小化。

打赏