池化思想
我有一个学习习惯,学习一个知识点或者技术的时候,总是想把它包含的或者相关的东西也拓展着看一看,这样一来特别容易跑偏,然后就一发不可收拾,有时候忘了自己最初是干嘛来着。就目前来看,这个习惯真的有点影响效率,以后要不忘提醒自己,目标是什么?跑偏了吗?如果跑偏了差不多就收回来。
但是这个习惯也有一定的好处,就像最近在学习多线程,关于线程池的学习,然后想到“池”这个字在计算机领域出现的频率还蛮高,比如:数据库连接池、线程池、Java常量池、NAT公网地址池,所以就想对池化思想做一些思考和总结。
说到池一下想到水池,水池的作用是什么?当然是蓄水,那么就以多人排队取水为例
单线程的方式:大家排队一个一个取水,为了不浪费水,每个人接完水后,关掉水龙头,下一个人接的时候再打开水龙头,开水龙和关水龙头可以看成创建和销毁一个线程用于一个人的取水任务。这种方式适合人少的场景。
多线程的方式:多提供几个水龙头,这种方式适合人较多的场景,例如学生宿舍的公共水房。
线程池的方式:提供一个水池,先将水放到水池,然后由多个人同时在水池取水,水龙头可以不用频繁开关,可以支持多人并发取水,但是水池需要专人监管,如监控水池溢出,水池没水,水池取水人员达到上限等。这种方式适合高并发的情况。
当高并发的时候,不可小看关水龙头和开水龙头带来的时间浪费,也可理解为线程的系统开销,由此看来池化思想最大的作用是支持复用, 避免重复的创建销毁带来的开销。
未完待续。。。