线程池一般用来负责处理异步事件,通常是建立一组线程,当有任务需要执行时,将任务推入线程池进行操作;
不同在于
1)推入队列的可以是处理函数,也可以是单纯的事件数据;如果是处理函数可以是函数指针或者lamda表达式,在线程激活后直接执行函数体;如果时推入的是数据,则可以根据数据类型加载不同的处理单元执行不同的处理;姑且称之为“操作早绑定”和“操作晚绑定”。
2)线程池中共享单个任务队列,也可以每个线程单独拥有一个任务队列,用途不同;
这里描述如下:
一般来说,任务执行时间长,可以采用这样的模式;
这样的模式要求任务执行时间短,或者任务本身有状态;比如epoll适合采用这样的模型,服务端将新的socket添加到不同的线程中,每个线程由一个epoll循环;参考muduo库;
模式1的缺点是锁竞争造成的性能问题,可以适当改进一下,缩小锁的粒度,
未完,待续