`
Qieqie
  • 浏览: 341219 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Re: 线程池的实现

阅读更多
LZ的思路,是线程共享任务队列,线程按同步方法获取一个非空的任务执行:工作线程自己去“拉单”干。

我提供另外一种思路,线程是被动,由别人(监工)分配,激发:

有一个主线程--“监工”:负责查看任务队列中是否有任务,如果有,取出一个任务,设置到一个“空闲”的线程中,并notify该线程。

while (hasTask) {
   1、get the task from task quene 
   2、get an waiting worker thread, or create a new workder thread
   3、set the task to the thread, and set the thread status running
   synchronized(thread) {
       4、thread.nofity();//not notifyAll()
   }
}




线程类的run方法会是这样的:
synchronized(this) {
    while (!shutdown) {
        if (status == running) {
           1、run the task;
           2、task = null;
           3、status = waiting;
           4、manager.done(this, task);//告知监工自己已经完成这个任务
       }
       5、this.wait();
    }
}
分享到:
评论

相关推荐

    【每日爬虫】:利用线程池爬取2万张装修效果图

    在实现过程中,作者定义了一个名为`House_renderings`的类,该类初始化时创建了一个包含10个线程的线程池,并设置了一个标志变量`is_running`来跟踪程序状态。此外,还定义了以下方法: - `get_html(self, url)`:...

    110道Python面试题汇总

    - 算法基础:排序算法(如冒泡、选择、插入、快速排序等)和查找算法(如二分查找)的理解与实现。 - 链表、栈、队列、堆等高级数据结构的概念和应用。 3. **面向对象编程**: - 类与对象:理解类的定义、实例化...

    Java虚拟机JVM:lib_j2re_test.rar

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java应用程序提供了运行环境,使得开发者无需关注底层操作系统和硬件的细节,即可实现跨平台的代码执行。在"lib_j2re_test.rar"这个压缩包中,我们可能找到了与Java...

    用Python实现网络爬虫、蜘蛛.docx

    Python的`concurrent.futures`模块提供了线程池和进程池,可以帮助我们实现并发抓取。 此外,如果要构建一个完整的爬虫系统,可以使用Django框架来管理爬虫任务。Django是一个强大的Web开发框架,其模型-视图-控制...

    C#多线程详解

    在C#中,异步编程通常通过多线程实现,但也可以通过任务(如`Task`)和异步编程模型(如`async/await`)来实现。 #### 二、WinForm多线程编程篇 **1. 处理WinForm中InvalidOperationExcption异常** 在WinForm应用...

    python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    对于大型视频或高并发下载,可能需要更复杂的策略,比如使用线程池(`concurrent.futures.ThreadPoolExecutor`)或者异步IO(`asyncio`)来更有效地管理和控制资源。此外,合并过程也可以优化,例如,可以在下载的...

    Python爬虫总结 (2).docx

    - **具体实现:** - `aiohttp`:异步HTTP客户端/服务器。 **3. 动态网站爬取** - **Selenium:** - 模拟浏览器行为。 - 支持多种浏览器。 - **Pyppeteer/Playwright:** - 基于Chromium的自动化工具。 **4...

    Python面试题整理.zip

    - **线程池**:使用`concurrent.futures.ThreadPoolExecutor`进行任务调度。 - **异步I/O**:基于`asyncio`库实现异步编程,如协程(coroutine)。 以上这些是Python面试中常见的知识点,每个点都可以深入探讨,...

    处理文本文件的程序代码.zip

    在IT领域,文本文件处理是日常工作中...这个压缩包可能包含了一些具体的代码实现,如读取、过滤、清洗文本数据,或者进行文本分析和处理的实用工具。通过学习这些代码,你可以更好地理解如何在实际项目中应用上述知识。

    LeetCode Java Algorithm 记录数据结构与算法训练题,分享java面试题.zip

    - Python标准库:os、sys、re、math、collections、heapq、networkx等。 综上所述,这个压缩包包含的内容广泛且深入,涵盖了数据结构、算法、多种编程语言的基础知识,以及面试中常见的Java相关问题,对于提升编程...

    python面试题超纲20道.rar_python面试

    14. **并发与多线程(Concurrency and Multithreading)**:Python的线程模型,以及线程池、信号量、事件循环等并发控制机制。 15. **网络编程**:如socket编程,理解TCP/UDP协议,以及如何使用requests库进行HTTP...

    python自学资料进阶

    7. 并发与多线程:探讨Python的并发模型,如线程、进程和GIL(全局解释器锁),并讲解如何使用线程池和异步IO。 8. 网络编程:包括TCP/IP通信、套接字编程,以及HTTP协议的实现,可能还会涉及Web服务器的构建。 9....

    beauty:Boost.Beast之上的一个简单的C ++ Http服务器客户端

    可自定义的线程池大小 进行中:Swagger描述API 例子 一台服务器 # include int main () { // Create a server beauty::server server; // Add a default '/' route server. get ( " / " , []( const auto & req...

    python3.5 爬取花瓣美女

    Python 3.5引入了asyncio库,提供了一种更高效的异步编程模型,可以实现并发执行任务,而无需额外的线程池。 8. **IP代理**:为了避免因频繁请求导致的IP被封,可以使用代理IP。Python有许多库,如`rotating_...

    Expert-Python-Programming-by-Michal-Jaworski-Forth-Edition

    8. **Python标准库和第三方库**:介绍Python标准库中的重要模块,如`os`, `sys`, `datetime`, `re`等,以及如何利用第三方库(如`requests`, `numpy`, `pandas`, `matplotlib`等)来扩展Python的功能。 9. **测试和...

    斗图啦爬虫源代码(多线程)

    在Python中实现多线程爬虫,开发者通常会创建一个线程池,将每个待爬取的URL分配给一个线程,然后在线程中执行HTTP请求、解析HTML、提取数据等操作。多线程爬虫的关键在于合理控制线程数量,过多可能会导致服务器...

    Python核心编程中文版 第2版和第3版

    本章会介绍基本的正则表达式语法,如字符类、量词、分组、锚点等,以及如何在Python中使用`re`模块进行正则表达式的编译、匹配、搜索、替换等操作。同时,还会讲解正则表达式的高级特性,如零宽断言、正向预查和反向...

    Python核心编程

    2. **面向对象编程**:介绍类的定义、对象的创建与实例化、封装、继承、多态等概念,以及如何利用这些特性来设计和实现复杂系统。 3. **模块与包管理**:讲解如何编写模块、导入模块、使用标准库和第三方库,以及...

    Python多线程网络爬虫小工具

    在Python中,实现爬虫通常会用到以下几个核心库: 1. **`requests`**:用于发送HTTP请求,获取网页内容。它是Python中最常用的网络请求库,可以方便地处理GET、POST等各种HTTP方法。 2. **`BeautifulSoup`**:解析...

Global site tag (gtag.js) - Google Analytics