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


    非分布式下的线程分析:

    举一个案例:发送一个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%命中率的条件暂未搞清楚

    -2线程带缓存 in 2-CPU system:process 444 requests per second.(1000ms/2.25ms=444),why

    最佳线程池大小计算:

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

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

    线程创建开销主要体现在内存分配时间上,线程池维护开销主要体现在线程上下文切换上。设创建一个线程开销为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 *

    M.I.T. Laboratory for Computer Science
    和一篇博客:End to End Argument(可能是最重要的系统设计论文)

    Epidemic Protocols

    epidemic protocols

    Anti-Entropy Model

    Gossiping

    P2P Routing

    Pastry

  • 相关阅读:
    MySQL 连接的使用
    MySQL GROUP BY 语句
    MySQL 排序
    MySQL UNION 操作符
    MySQL LIKE 子句
    MySQL DELETE 语句
    MySQL UPDATE 更新
    MySQL WHERE 子句
    php MySQL 查询数据
    MySQL 插入数据
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/16746506.html
Copyright © 2020-2023  润新知