鱼C论坛

 找回密码
 立即注册
查看: 1878|回复: 2

[技术交流] 多线程、线程池以及单线程+异步协程笔记

[复制链接]
发表于 2021-8-21 02:23:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
怕忘记了,蹭着还熟悉赶紧记录一下。
笔记都是相对自己说的话。
1.最开始我们有多线程,我们为什么需要线程池呢?
使用多线程我们一般是利用循环来创建线程,但是如果我们爬取的url有成千上万个,
那么我们的cpu是吃不消的,线程开多了反而效率低下,所以我们需要一个方法来限
制线程的数量,于是我们有了线程池。



2.有了线程池这种多线程方式为什么我们需要单线程+异步协程?
为了提高线程的利用率,因为我们发送请求给网站是很快的,而慢的是等待web服务
器的回应,既然发送请求很快,那么一个线程发送完请求完全可以去干其他的事情(
发送其他请求),所以使用单线程+异步协程极大提高了线程的利用率。


3.那单线程+异步协程是否完全可以替代线程池呢?
不能。
举个例子:也是今天遇到的,我们想要爬取一整部小说,为了效率我们考虑使用线程池
或者单线程+异步协程的方式,但是问题来了,小说爬取下来我们是希望章节按照原有
顺序排列,而以上两种爬取方式都会导致小说章节顺序混乱。但是线程池这种多线程的
方式我们是有解决方法的,举个例子我们用20个线程去爬取,这20个线程第一次出击的
时候爬取的是前20个章节,前20个章节中每一个章节都有线程在,我们利用阻塞等待的
思想让线程有序存放就可以了,而单线程因为只有一个线程,这个线程阻塞了它就不可
能有等待的结果,所以如果需要按顺序提取,我们还是使用多线程的形式。


4.爬取的步骤:(拿一部小说为例,小说的每一个章节对应一个url)
一:我们先解析到小说的全部url封装到一个列表里面;

二:根据储存需要选择方案(从效率、是否要顺序存储方面考虑);

三:无论是单线程、多线程、线程池还是单线程+异步协程
我们都用循环遍历列表,发送请求。(协程就是事件循环);

四:长期存储


记忆:线程池和单线程+异步协程这种默认执行完了才执行后续代码的方式我们使用with……as:
多线程是需要我们手动等待的,我们用join。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-21 02:23:45 | 显示全部楼层
自己给自己顶一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-21 02:25:18 | 显示全部楼层
有什么错误欢迎指出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 13:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表