测试开发知识面扩展:神秘的线程池

2513 篇文章 2 订阅
2350 篇文章 14 订阅

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客文章浏览阅读3.4k次,点赞86次,收藏15次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502​编辑https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502

线程池是一种常见的并发编程模式,它可以帮助我们更好地管理和控制线程的使用。

  1. 基本概念:

    • 线程池是一组预先创建的线程,用于执行各种任务。

    • 当有新的任务需要执行时,可以将其提交给线程池,而不需要每次都创建一个新的线程。

    • 线程池会管理线程的生命周期,并根据需求动态调整线程的数量。

  2. 好处:

    • 避免频繁创建和销毁线程的开销,提高性能。

    • 能够控制并发的线程数量,防止资源过度消耗。

    • 简化并发编程的复杂性,提高代码可读性和可维护性。

  3. 缺点:

    • 线程池的创建和管理会增加一定的复杂度和开销。

    • 如果任务的执行时间差异很大,可能会导致资源利用率不均衡。

    • 如果任务执行时间过长,可能会导致线程池阻塞,影响整体性能。

  4. 应用场景:

    • 网络服务器(如 web 服务器、RPC 服务器)

    • 数据库连接池

    • 计算密集型任务(如图像处理、机器学习)

    • I/O 密集型任务(如文件 I/O、网络 I/O)

下面是使用 Python 实现一个简单的线程池:

import threading
import queue

class ThreadPool:
    """
    一个简单的线程池实现。

    Args:
        num_threads (int): 线程池中的线程数量。
    """
    def __init__(self, num_threads):
        self.num_threads = num_threads
        self.task_queue = queue.Queue()  # 用于存储待执行的任务
        self.threads = []  # 存储线程池中的线程
        self._init_threads()  # 初始化线程池

    def _init_threads(self):
        """
        初始化线程池中的线程。
        """
        for _ in range(self.num_threads):
            thread = threading.Thread(target=self._worker)
            thread.daemon = True  # 设置线程为守护线程
            thread.start()  # 启动线程
            self.threads.append(thread)

    def _worker(self):
        """
        线程池中的工作线程,不断从任务队列中取出任务并执行。
        """
        while True:
            task = self.task_queue.get()  # 从任务队列中取出一个任务
            try:
                task()  # 执行任务
            except Exception as e:
                print(f"Error executing task: {e}")
            finally:
                self.task_queue.task_done()  # 标记任务已完成

    def submit(self, task):
        """
        将一个任务提交到线程池中。

        Args:
            task (callable): 要执行的任务。
        """
        self.task_queue.put(task)

    def wait_completion(self):
        """
        等待线程池中所有任务执行完毕。
        """
        self.task_queue.join()

# Example usage
def my_task():
    """
    一个示例任务,打印当前线程的名称。
    """
    print(f"Task executed by thread {threading.current_thread().name}")

pool = ThreadPool(num_threads=4)

for _ in range(10):
    pool.submit(my_task)

pool.wait_completion()

在这个示例中,我们创建了一个 ThreadPool 类,它管理一组预先创建的线程。submit() 方法用于提交任务到线程池,wait_completion() 方法用于等待所有任务完成。

self.task_queue.join() 是 Python 标准库中 queue.Queue 类的内置方法。

queue.Queue.join() 方法的作用是:

  1. 阻塞当前线程,直到队列中所有的任务都被取出并处理完毕。

  2. 当所有任务都被处理完毕后,该方法才会返回。

这个方法通常用于等待线程池中所有任务的完成,就像在示例中的 ThreadPool.wait_completion() 方法中一样。

这个简单的线程池实现了任务队列、线程管理和任务执行的基本功能。在实际应用中,您可能需要添加更多的功能,如任务优先级、任务超时处理、线程池大小动态调整等。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值