You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.6 KiB
1.6 KiB
目标
本节使用一个爬虫任务来展示如何追求代码的性能 。 充分理解线程、协程、进程、同步、异步、阻塞、非阻塞等概念,并能够根据具体场景选择合适的并发模型。 主线问题:如何解决IO和计算速度不匹配、如何任务分解、分发和协作 。
任务
讨论分析
普通做法连续进行了五次测试,时间分别为34.231s、34.091s、34.164s、34.226s、33.958s,平均时间为34.134s 多进程(进程数=5)连续进行了五次测试,时间分别为7.719s、7.716s、7.690s、7.730s、7.711s,平均时间为7.7132s 多线程(线程数=5)连续进行了五次测试,时间分别为7.185s、7.964s、6.983s、6.969s、7.035s,平均时间为7.2272s 协程连续进行了五次测试,时间分别为3.775s、3.807s、3.733s、3.824s、3.744s,平均时间为3.776s 异步连续进行了五次测试,时间分别为6.975s、7.675s、7.018s、7.032s、7.049s,平均时间为7.1498s 注:为保证公平性,每一次Post请求后休眠3秒
可以看出,协程的性能最好,普通做法的性能最差,多线程、多进程和异步的性能介于两者之间。 考虑到多进程和多线程是故意开的5个进程和线程,而协程是单线程,所以协程的性能最好。 另外,异步的性能最差,可能是由于异步的并发模型需要频繁地切换线程,导致性能下降。 总的来说,协程的性能最好,多线程和多进程的性能介于两者之间,普通做法的性能最差。
总结
协程的性能最好,多线程和多进程的性能介于两者之间,普通做法的性能最差。