整个客户端到服务器的线程池使用概念模型,大体可以分为四部分,创建链接- 任务分配- 线程处理且归还子线程-进入下一个任务周期。(可以从这几个方面去看,毕竟整体问题是在服务器和客户端之间发生的事件而且服务器大部分都是一直在运行的,线程的销毁还是需要再具体情况具体分析,这次先写前三条的一些内容,其他的还在查看资料学习。)
1、建立链接接收任务(主线程进行)
2、资源分配(线程的资源分配,回收)
3、使用完将线程还回线程池(感觉线程池,说是池化,只是需要其他组件一起实现,核心还是创建多线程,进行任务匹配,处理,然后线程空余出来等待下一波工作的开始)
4、线程使用的过程中也需要注意用户态和内核态数据的复制(文件描述符的复制,数据的读写等)
5、单纯的使用数据的复制(非内核态),如果数据过大或者申请空间频率较高的时候,效率明显不行,而且也浪费很多空间。
6、上下文的切换(简单说就是CPU处理任务的过程中,寄存器状态的切换)
在使用线程池的时候,一开始考虑到两个问题(任务的产生和处理:当时因为在写服务器,也有考虑线程分配的问题,不管我们用的是select去监听不同的链接,还是epoll,甚至自己写任务队列去管理线程和任务分配,都不能理解客户任务请求,是怎么和线程匹配上的,或者有人考虑过随机的去匹配,但是当别的线程被占用的时候,我又怎么去找到空闲的线程去和任务匹配呢?)
目前先看下select的内容,