而且因为此时工作线程已经到瓶颈了,再往上去加线程,不仅无法提升性能,反而会消耗更多的资源对此,我们的解决方案是工作多线程,也就是说把请求处理的过程也多线程化如上图所示,在工作多线程方案下,每个线程都会去处理请求,并且每个线程会完成从收包到请求处理,然后到发包的整个过程,是一个--线程模型
相比多线程,它会减少很 科威特手机号码列表 多线程切换,节省很多的资源同时对于请求处理的过程,我们也通过细致的梳理,尽量缩小了临界区的范围,以保证大部分的请求处理过程是在临界区之外的,来提升处理并发度如果一个工作线程需要加锁的话,它会先如果加锁成功就继续执行了,但如果加锁失败的话,这个工作线程注册一个管道的通知消息,然后就继续处理网络的收发包,还有非临界区的请求了

等到锁被释放的时候,这个工作线程会通过获得管道里面的锁释放通知,然后去拿到这把锁这个时候它就可以去处理临界区的请求操作了这样的话,在整个加锁、解锁的过程中,工作线程没有任何阻塞,仍然可以继续做网络收发、非临界区请求的处理,获得最大限度的处理能力另外,对于新建、数据复制等工作,跟工作线程的耦合很低,我们将其放到了单独的线程去执行,以尽量降低工作线程的负载
|