 Rust 程序设计语言 简体中文版 1.85.0} }); } 当然这并不是非常的有趣。我们完全可以使用普通的迭代器而不用任何异步操作来做到这些。 所以让我们看看流能实现的一些独特功能。 组合流 很多概念天然地适合用流来表示:队列中陆续可用的项、数据量超过计算机内存限制时逐步从 文件系统拉取的数据块,或者随时间推移通过网络逐渐到达的数据。因为流本身也是 future, 我们也可以将其用于任何其它类型的 future,并以一些非常有趣的方式组合它们。例如,我们 不同于分配无限的线程,线程池中将有固定数量的等待线程。当新进请求时,将请求发送到线 程池中做处理。线程池会维护一个接收请求的队列。每一个线程会从队列中取出一个请求,处 理请求,接着向队列获取下一个请求。通过这种设计,则可以并发处理 N 个请求,其中 N 为 线程数。如果每一个线程都在响应慢请求,之后的请求仍然会阻塞队列,不过相比之前已经增 加了能处理的慢请求的数量。 这个设计仅仅是多种改善 web 服务端吞吐量的方法之一。其他可供探索的方法有 thread::spawn 传递一个要运行的闭包。 我们希望刚创建的 Worker 结构体能够从 ThreadPool 的队列中获取需要执行的代码,并发送到 线程中执行。 在第十六章,我们学习了 信道 —— 一个沟通两个线程的简单手段 —— 对于这个例子来说则 是绝佳的选择。这里信道将充当任务队列的作用,execute 将通过 ThreadPool 向其中线程正 在寻找工作的 Worker 实例发送任务。计划如下:0 码力 | 562 页 | 3.23 MB | 26 天前3 Rust 程序设计语言 简体中文版 1.85.0} }); } 当然这并不是非常的有趣。我们完全可以使用普通的迭代器而不用任何异步操作来做到这些。 所以让我们看看流能实现的一些独特功能。 组合流 很多概念天然地适合用流来表示:队列中陆续可用的项、数据量超过计算机内存限制时逐步从 文件系统拉取的数据块,或者随时间推移通过网络逐渐到达的数据。因为流本身也是 future, 我们也可以将其用于任何其它类型的 future,并以一些非常有趣的方式组合它们。例如,我们 不同于分配无限的线程,线程池中将有固定数量的等待线程。当新进请求时,将请求发送到线 程池中做处理。线程池会维护一个接收请求的队列。每一个线程会从队列中取出一个请求,处 理请求,接着向队列获取下一个请求。通过这种设计,则可以并发处理 N 个请求,其中 N 为 线程数。如果每一个线程都在响应慢请求,之后的请求仍然会阻塞队列,不过相比之前已经增 加了能处理的慢请求的数量。 这个设计仅仅是多种改善 web 服务端吞吐量的方法之一。其他可供探索的方法有 thread::spawn 传递一个要运行的闭包。 我们希望刚创建的 Worker 结构体能够从 ThreadPool 的队列中获取需要执行的代码,并发送到 线程中执行。 在第十六章,我们学习了 信道 —— 一个沟通两个线程的简单手段 —— 对于这个例子来说则 是绝佳的选择。这里信道将充当任务队列的作用,execute 将通过 ThreadPool 向其中线程正 在寻找工作的 Worker 实例发送任务。计划如下:0 码力 | 562 页 | 3.23 MB | 26 天前3
共 1 条
- 1













