【笔记】并行与分布式-进程组织与交互

人工智能73

举一个案例:发送一个request需要2ms,I/O延迟8ms。

-单线程处理:process 100 requests per second.

-2线程处理:process 125 requests per second.(原因:双线程情况下,主要由I/O占据时长,I/O期间也能保证随时发送request,因此 1000ms/8ms=125),另外,第一次发送请求的时长可以忽略,因为系统一旦开始运行,计算的就是某个时间窗口内的平均值,下面的情况也是如此。

-2线程带缓存(0.5ms for searching the cache, 75% cache hit ratio):process 400 requests per second.(带缓存机制后,I/O时间可以忽略了,发送请求带查询时间一共2.5ms,因此 1000ms/2.5ms=400), 关于为何忽略了75%命中率的条件暂未搞清楚

相比于实时创建线程,线程池技术会节省线程创建的开销 ,但又会带来线程池管理的开销,包括并发控制、线程上下文切换等。线程池里面的线程数越多,并发度越高,同时管理开销也会越高。因此并不是线程数越多越好,那么一定会有一个最优值。

总收益=线程创建开销-线程管理开销。

线程创建开销主要体现在内存分配时间上,线程池维护开销主要体现在线程上下文切换上。设创建一个线程开销为c1,一次线程上下文切换开销为x,维护1个线程池开销为c2。那么创建n个线程开销为c1×n,n个线程的线程池切换开销为n×x,维护开销为$c2 \times n \approx x \times n$,实际系统中每一时刻请求数目r是一个随机值,概率分布函数为f(r)。

$if 0\leq r \leq n \text{, then the gain of thread pool is }c1 \times r - c2 \times n$

$if r > n \text{, then the gain of thread pool is }c1 \times n - c2 \times n$

因此线程池的预期收益为:$E(n)=\sum_{r=0}^{n}(c_1 r-c_2 n)f(r)+\sum_{r=n+1}^{\infty}(c_1 n-c_2 n)f(r)$

为便于处理,进行连续化:$E(n)=\int_{0}^{n}(c_1 r-c_2 n)p(r)dr+\int_{n}^{\infty}(c_1 n-c_2 n)p(r)dr$

求极值:$\frac{dE}{dn}=-c_2 + c_1 \int_{n}^{\infty}p(r)dr=0$

如果令$\zeta =c_2 / c_1, n^*$为E(n)取极大值时n的值,那么

$$
\int_0^{\lfloor n^ \rfloor}{p\left( r \right) dr}\le 1-\zeta ,\,\,\int_0^{\lfloor n^+1 \rfloor}{p\left( r \right) dr}>1-\zeta
$$

如果并发请求数为均匀分布Uniform(0,N)时,上式变为:

$$
\frac{\lfloor n^ \rfloor}{N}\le 1-\zeta ,\,\,\frac{\lfloor n^ \rfloor +1}{N}>1-\zeta
$$

如果已知N(并发用户数)和$\zeta$就可以求得$n^*$

推荐一篇文章:《END-TO-END ARGUMENTS IN SYSTEM DESIGN》

J.H. Saltzer, D.P. Reed and D.D. Clark *

Epidemic Protocols

epidemic protocols

Anti-Entropy Model

Gossiping

Pastry

Original: https://www.cnblogs.com/zhaoke271828/p/16746506.html
Author: Viktor_Cullen
Title: 【笔记】并行与分布式-进程组织与交互