IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    简单理解多线程、线程池与队列设置

    vacuity发表于 2025-05-16 11:30:47
    love 0
    简单理解多线程、线程池与队列设置

    非技术指导性文章,用简单的例子描述下什么是多线程以及队列

    一般一个多线程任务设置会涉及到如下专业名词:
    核心线程数
    最大线程数
    队列长度
    还有个不太常用到的拒绝策略

    例子:
    假设有一个银行,这个银行就是一个业务进程。
    1、最开始没有银行,只有一个小桌子,做了一个经理,所有来办理业务的人都只能在他这,等他办完前一个才能处理下一个
    2、后来发现办理太慢,决定盖一个银行,招一些人
    3、银行里有一些职员,还有一些业务窗口,其中一些是正式窗口,就是一直开放的,一些是临时窗口。
    4、当有用户来办理业务时,经理首先看正式窗口是不是空闲,如果空闲就让他直接去办理,不空闲的话,在看下能不能开临时窗口,如果能开就去临时窗口,如果临时窗口也满了,就给他排队取号。
    5、因为银行的空间是有限的,所以排队的人数也是有限制的的。
    6、当排队的人数达到了最大限制,就需要经理来选择怎么做,是直接告诉他回去,还是经理自己帮他办理,当经理帮他办理时,就回到了最开始阶段,后面的人就只能经理处理完当前的人的业务,再去处理下一个。

    在上文中:
    客户就是要消费的任务,经理就是主进程
    最开始时只有经理,是单线程
    当有了银行时,就是一个线程池:职员就是CPU,正式窗口就是核心线程,正式+临时窗口就是最大线程,队列长度就是排队限制

    当一个用户在办理业务时,他有可能需要填写一些东西(IO),当他填东西时,可以认为职员(CPU)是在等待他填完,这个时候他就可以去其他窗口处理其他人的业务(CPU调度)。也就是说窗口其实可以比职员多的,但是太多也没有意义,因为一个人不可能顾得上200个窗口。

    对于6就是队列满的时候的拒绝策略,一般默认的策略是主进程自己处理,那就是这个经理处理,同时整个业务阻塞,也就是整个银行入口都卡住。



沪ICP备19023445号-2号
友情链接