
# 案例研究：股票价格分析

## 案例背景
股票价格分析是金融领域常见任务，涉及从互联网获取实时或历史价格数据（I/O密集型），以及执行复杂计算如傅里叶变换以分析趋势（计算密集型）。

## 任务目标
假设任务是从 Yahoo Finance 获取股票价格数据（如AAPL、MSFT、GOOG），然后对每组数据执行傅里叶变换以分析频率成分。

各模型的特点和适用场景说明：

** 串行执行 **
特点：顺序执行所有任务, 编程简单。
性能：作为基准。
适用场景：任务量少、无性能要求时。

** 多线程执行 **
特点：线程池并发处理 I/O 任务，但受限于 Python 的 GIL（全局解释器锁），计算任务无法并行。
性能：在 I/O 密集型任务中显著优于串行执行，但在计算密集型任务中提升有限。
适用场景：网络请求、文件读写等 I/O 密集型任务。

** 多进程执行 ** 
特点：进程池并行执行任务，可充分利用多核 CPU。
性能：在计算密集型任务（如傅里叶变换）中表现优异，但在 I/O 任务中因进程开销可能不如多线程或异步。
适用场景：数学计算、数据处理等计算密集型任务。

** 异步执行 ** 
特点：单线程处理并发 I/O 任务 。
性能：在 I/O 密集型任务中效率高，但在计算密集型任务中无优势。
适用场景：高并发网络请求、API 调用等 I/O 密集型任务。

** 混合执行 ** 
数据获取使用异步方法，计算部分使用多进程并行。
结合了异步 I/O 的高效性和多进程计算的并行性。

## 性能比较和分析
多线程和异步在 I/O 密集型任务中大幅缩短时间。
多进程在计算密集型任务中提升性能。
运行结果依据实际时间因网络和硬件而异，并不能直接说明执行方式的特点。
时间消耗测评可以追踪到更细化的步骤进行分析。

通过这个案例，读者可以：
理解 I/O 密集型和计算密集型任务的区别，
了解多线程、多进程和异步编程的实现方法。


## 其它
无代理环境，可以自行查阅资源用 request 直接爬股票数据 。