多线程的自然分裂管理法
多线程在一般环境下通常是分主副线程,主线程负责进行线程调度.具体负责的是线程的创建,
流程如:主线程接受任务->根据任务创建线程->子线程处理任务->结束退出
更高阶的处理模式如线程池:主线程创建若干子线程->子线程闻讯堆栈是否有任务->有任务处理之->等待新的任务->被新任务事件触发后处理任务->回到等待新任务
注意如上处理过程有个共同点就是子线程没有创建新线程的权利.
多线程的自然分裂管理法的意识就是不区分主副线程.
当一个线程开始时,是否创建新线程由这个线程根据当前情况决定.
例如当前处理的堆栈超过一定数量,不能满足处理需求时,逻辑线程主动创建一个新线程来处理,
当前堆栈少于一定数量,并且线程计数大于某些值的情况下就可以申请销毁自己.
也就是一个线程是否创建或销毁完全由当前线程根据实际情况判断.
线程数量的多寡,甚至是否会导致频繁创建线程,这些都是可以控制的.
自然分裂的优势不在于等待任务,而是处理那些不相干任务时减少跨线程的通讯.
发现任务不能处理之后可以主动分裂线程,因为是数据的所有权在整个分裂过程中都是多线程安全的.
分离之后也是多线程安全的,形成伞形的发散,直到所有任务被处理完毕,线程自动销毁.
在一些可以形成新任务的场合,如网络句柄中的listen和connect,
积攒到一定数量的句柄后就可以产生分离,
纯链接的数据句柄在所有句柄都断开链接后就可以主动销毁.
而其他有繁殖能力的句柄又会产生新的分离,形成美妙的场景.