diff --git a/examples.txt b/examples.txt
index 39b3ebd..da34936 100644
--- a/examples.txt
+++ b/examples.txt
@@ -33,7 +33,7 @@ Select
Тикеры (повторения) (Tickers)
Пулы воркеров (Worker Pools)
WaitGroups
-Rate Limiting
+Ограничение скорости (Rate Limiting)
Atomic Counters
Mutexes
Stateful Goroutines
diff --git a/examples/rate-limiting/rate-limiting.go b/examples/rate-limiting/rate-limiting.go
index c32483d..de4d0f8 100644
--- a/examples/rate-limiting/rate-limiting.go
+++ b/examples/rate-limiting/rate-limiting.go
@@ -1,8 +1,7 @@
-// [Rate limiting](http://en.wikipedia.org/wiki/Rate_limiting)
-// is an important mechanism for controlling resource
-// utilization and maintaining quality of service. Go
-// elegantly supports rate limiting with goroutines,
-// channels, and [tickers](tickers).
+// [Ограничение скорости](http://en.wikipedia.org/wiki/Rate_limiting)
+// является важным механизмом контроля использования ресурсов и
+// поддержания качества обслуживания. Go элегантно поддерживает
+// ограничение скорости с помощью горутин, каналов и [тикеров](tickers).
package main
@@ -13,52 +12,54 @@ import (
func main() {
- // First we'll look at basic rate limiting. Suppose
- // we want to limit our handling of incoming requests.
- // We'll serve these requests off a channel of the
- // same name.
+ // Сначала мы рассмотрим базовое ограничение скорости.
+ // Предположим, мы хотим ограничить нашу обработку
+ // входящих запросов. Мы будем обслуживать эти запросы
+ // с одноименного канала.
requests := make(chan int, 5)
for i := 1; i <= 5; i++ {
requests <- i
}
close(requests)
- // This `limiter` channel will receive a value
- // every 200 milliseconds. This is the regulator in
- // our rate limiting scheme.
+ // Канал `limiter` будет получать значение каждые
+ // 200мс. Это то, что регулирует скорость в нашей
+ // схеме.
limiter := time.Tick(200 * time.Millisecond)
- // By blocking on a receive from the `limiter` channel
- // before serving each request, we limit ourselves to
- // 1 request every 200 milliseconds.
+ // Блокируя прием от канала `limiter` перед
+ // обслуживанием каждого запроса, мы ограничиваем себя
+ // одним запросом каждые 200 миллисекунд.
for req := range requests {
<-limiter
fmt.Println("request", req, time.Now())
}
- // We may want to allow short bursts of requests in
- // our rate limiting scheme while preserving the
- // overall rate limit. We can accomplish this by
- // buffering our limiter channel. This `burstyLimiter`
- // channel will allow bursts of up to 3 events.
+ // Мы можем разрешить короткие всплески запросов в
+ // нашей схеме ограничения скорости при сохранении
+ // общего ограничения скорости. Мы можем сделать это
+ // путем буферизации нашего канала ограничения. Этот
+ // канал `burstyLimiter` будет позволять делать до
+ // 3 событий.
burstyLimiter := make(chan time.Time, 3)
- // Fill up the channel to represent allowed bursting.
+ // Заполняем канал, чтобы предоставить возможность
+ // ускорить.
for i := 0; i < 3; i++ {
burstyLimiter <- time.Now()
}
- // Every 200 milliseconds we'll try to add a new
- // value to `burstyLimiter`, up to its limit of 3.
+ // Каждые 200мс мы будем пытаться добавлять новое
+ // значение в `burstyLimiter`, до своего предела
+ // в 3 значения.
go func() {
for t := range time.Tick(200 * time.Millisecond) {
burstyLimiter <- t
}
}()
- // Now simulate 5 more incoming requests. The first
- // 3 of these will benefit from the burst capability
- // of `burstyLimiter`.
+ // Теперь смоделируем еще 5 входящих запросов. Первые
+ // 3 из них получат выгоду от вместимости `burstyLimiter`.
burstyRequests := make(chan int, 5)
for i := 1; i <= 5; i++ {
burstyRequests <- i
diff --git a/examples/rate-limiting/rate-limiting.sh b/examples/rate-limiting/rate-limiting.sh
index a01a130..16fbb2b 100644
--- a/examples/rate-limiting/rate-limiting.sh
+++ b/examples/rate-limiting/rate-limiting.sh
@@ -1,5 +1,5 @@
-# Running our program we see the first batch of requests
-# handled once every ~200 milliseconds as desired.
+# При запуске нашей программы мы видим, что первая
+# партия запросов обрабатывается каждые ~200мс.
$ go run rate-limiting.go
request 1 2012-10-19 00:38:18.687438 +0000 UTC
request 2 2012-10-19 00:38:18.887471 +0000 UTC
@@ -7,9 +7,10 @@ request 3 2012-10-19 00:38:19.087238 +0000 UTC
request 4 2012-10-19 00:38:19.287338 +0000 UTC
request 5 2012-10-19 00:38:19.487331 +0000 UTC
-# For the second batch of requests we serve the first
-# 3 immediately because of the burstable rate limiting,
-# then serve the remaining 2 with ~200ms delays each.
+# Для второго пула запросов мы обслуживаем первые
+# 3 сразу из-за использования ограничения скорости,
+# затем обслуживаем оставшиеся 2 с задержками ~200мс
+# каждый.
request 1 2012-10-19 00:38:20.487578 +0000 UTC
request 2 2012-10-19 00:38:20.487645 +0000 UTC
request 3 2012-10-19 00:38:20.487676 +0000 UTC