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();
}
}
分享到:
相关推荐
在实现过程中,作者定义了一个名为`House_renderings`的类,该类初始化时创建了一个包含10个线程的线程池,并设置了一个标志变量`is_running`来跟踪程序状态。此外,还定义了以下方法: - `get_html(self, url)`:...
- 算法基础:排序算法(如冒泡、选择、插入、快速排序等)和查找算法(如二分查找)的理解与实现。 - 链表、栈、队列、堆等高级数据结构的概念和应用。 3. **面向对象编程**: - 类与对象:理解类的定义、实例化...
Java虚拟机(JVM)是Java程序运行的核心组件,它为Java应用程序提供了运行环境,使得开发者无需关注底层操作系统和硬件的细节,即可实现跨平台的代码执行。在"lib_j2re_test.rar"这个压缩包中,我们可能找到了与Java...
Python的`concurrent.futures`模块提供了线程池和进程池,可以帮助我们实现并发抓取。 此外,如果要构建一个完整的爬虫系统,可以使用Django框架来管理爬虫任务。Django是一个强大的Web开发框架,其模型-视图-控制...
在C#中,异步编程通常通过多线程实现,但也可以通过任务(如`Task`)和异步编程模型(如`async/await`)来实现。 #### 二、WinForm多线程编程篇 **1. 处理WinForm中InvalidOperationExcption异常** 在WinForm应用...
对于大型视频或高并发下载,可能需要更复杂的策略,比如使用线程池(`concurrent.futures.ThreadPoolExecutor`)或者异步IO(`asyncio`)来更有效地管理和控制资源。此外,合并过程也可以优化,例如,可以在下载的...
- **具体实现:** - `aiohttp`:异步HTTP客户端/服务器。 **3. 动态网站爬取** - **Selenium:** - 模拟浏览器行为。 - 支持多种浏览器。 - **Pyppeteer/Playwright:** - 基于Chromium的自动化工具。 **4...
- **线程池**:使用`concurrent.futures.ThreadPoolExecutor`进行任务调度。 - **异步I/O**:基于`asyncio`库实现异步编程,如协程(coroutine)。 以上这些是Python面试中常见的知识点,每个点都可以深入探讨,...
在IT领域,文本文件处理是日常工作中...这个压缩包可能包含了一些具体的代码实现,如读取、过滤、清洗文本数据,或者进行文本分析和处理的实用工具。通过学习这些代码,你可以更好地理解如何在实际项目中应用上述知识。
- Python标准库:os、sys、re、math、collections、heapq、networkx等。 综上所述,这个压缩包包含的内容广泛且深入,涵盖了数据结构、算法、多种编程语言的基础知识,以及面试中常见的Java相关问题,对于提升编程...
14. **并发与多线程(Concurrency and Multithreading)**:Python的线程模型,以及线程池、信号量、事件循环等并发控制机制。 15. **网络编程**:如socket编程,理解TCP/UDP协议,以及如何使用requests库进行HTTP...
7. 并发与多线程:探讨Python的并发模型,如线程、进程和GIL(全局解释器锁),并讲解如何使用线程池和异步IO。 8. 网络编程:包括TCP/IP通信、套接字编程,以及HTTP协议的实现,可能还会涉及Web服务器的构建。 9....
可自定义的线程池大小 进行中:Swagger描述API 例子 一台服务器 # include int main () { // Create a server beauty::server server; // Add a default '/' route server. get ( " / " , []( const auto & req...
Python 3.5引入了asyncio库,提供了一种更高效的异步编程模型,可以实现并发执行任务,而无需额外的线程池。 8. **IP代理**:为了避免因频繁请求导致的IP被封,可以使用代理IP。Python有许多库,如`rotating_...
8. **Python标准库和第三方库**:介绍Python标准库中的重要模块,如`os`, `sys`, `datetime`, `re`等,以及如何利用第三方库(如`requests`, `numpy`, `pandas`, `matplotlib`等)来扩展Python的功能。 9. **测试和...
在Python中实现多线程爬虫,开发者通常会创建一个线程池,将每个待爬取的URL分配给一个线程,然后在线程中执行HTTP请求、解析HTML、提取数据等操作。多线程爬虫的关键在于合理控制线程数量,过多可能会导致服务器...
本章会介绍基本的正则表达式语法,如字符类、量词、分组、锚点等,以及如何在Python中使用`re`模块进行正则表达式的编译、匹配、搜索、替换等操作。同时,还会讲解正则表达式的高级特性,如零宽断言、正向预查和反向...
2. **面向对象编程**:介绍类的定义、对象的创建与实例化、封装、继承、多态等概念,以及如何利用这些特性来设计和实现复杂系统。 3. **模块与包管理**:讲解如何编写模块、导入模块、使用标准库和第三方库,以及...
在Python中,实现爬虫通常会用到以下几个核心库: 1. **`requests`**:用于发送HTTP请求,获取网页内容。它是Python中最常用的网络请求库,可以方便地处理GET、POST等各种HTTP方法。 2. **`BeautifulSoup`**:解析...