96SEO 2026-02-19 11:10 11
。

在多线程应用中#xff0c;若每有一个任务#xff0c;线程就去调度相应的函数去创建#xff0c;当任务过多时#xff0c;每次都去调度且每…
文章目录线程池线程池原理代码示例单例模式饿汉模式懒汉模式饿汉懒汉对比其他的锁线程池
线程池是一种线程使用模式。
在多线程应用中若每有一个任务线程就去调度相应的函数去创建当任务过多时每次都去调度且每次用完销毁影响效率加重CPU的负载
而线程池是提前创建好的一批线程不固定长度没任务时就挂起等待有任务分配时就被唤醒等待分配任务但也要具体分场景例如任务时间短且任务量大的时候
线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量
WEB服务器完成网页请求这样的任务使用线程池技术是非常合适的。
因为单个任务小而任务数量巨大你可以想象一个热门网站的点击次数。
但对于长时间的任务比如一个Telnet连接请求线程池的优点就不明显了。
因为Telnet会话时间比线程的创建时间大多了
有线程池情况下将产生大量线程虽然理论上大部分操作系统线程数目最大值不是问题短时间内产生大量线程
创建一个任务队列和线程池外部向任务队列Push任务任务队列唤醒线程池并Pop给线程池线程池分配出线程去执行任务
/*****************************************任务队列*************************************************/
_num(num){pthread_mutex_init(_mtx,
nullptr);pthread_cond_init(_cond,
{pthread_mutex_destroy(_mtx);pthread_cond_destroy(_cond);}//加锁void
Lock(){pthread_mutex_lock(_mtx);}//解锁void
Unlock(){pthread_mutex_unlock(_mtx);}//判断空bool
_task_queue.empty();}//唤醒条件变量的等待队列void
WakeUp(){pthread_cond_signal(_cond);}
wait(){pthread_cond_wait(_cond,_mtx);}//创建线程池void
args){//static函数不能访问类内成员和函数所以让外面实例化的对象调用Init通过this传进来ThreadPoolT*
(ThreadPoolT*)args;pthread_detach(pthread_self());while
为了能拿任务队列里的东西需要传递this指针tp-Lock();while
t;tp-Poptask(t);tp-Unlock();//拿完任务任务就属于调用Pop的那个线程了不是临界资源了//执行任务执行任务时就不用占着锁了t.Run();}}
in){Lock();task_queue_.push(in);Unlock();WakeUp();}//拿任务拿任务时的上下文是有锁的所以不需要在这里上锁void
task_queue_.front();task_queue_.pop();}
}/**********************************************************************************************/
_y;break;default:break;}//std::cout
_op;};}/**********************************************************************************************/
ThreadPoolTask();//创建线程tp-InitThreadPool();srand((unsigned
单例模式是指在整个系统生命周期内保证在内存中一个类只会创建且仅创建一次对象的设计模式确保该类的唯一性
可以节省内存节约资源对于一般频繁创建和销毁对象的可以使用单例模式
此时往往要用一个单例的类来管理这些数据也就是这么大的数据在内存只需要有一份避免数据冗余例如动态库
构造函数和析构函数为私有类型目的是禁止外部构造和析构拷贝构造函数和赋值构造函数是私有类型目的是禁止外部拷贝和赋值确保实例的唯一性类中的成员变量是静态的静态的无论实例化多少对象都只有公用一个静态成员变量类中要有一个获取实例的静态方法可以全局访问
需要将构造函数拷贝构造函数赋值运行符重载函数屏蔽防止在外部实例化对象
在类中创建一个静态类对象该静态类对象会在程序运行时创建需要在类外初始化
类中写一个接口静态返回静态类对象的地址。
因为无法调用拷贝构造不能直接返回类对象
因为下一顿吃的时候可以立刻拿着碗就能吃饭也就是系统一运行就初始化创建实例当需要时直接调用即可。
这种方式本身就可以保证线程安全没有多线程的线程安全问题
需要将构造函数拷贝构造函数赋值运行符重载函数屏蔽防止在外部实例化对象。
在类中成员包含一个类对象指针而不是对象。
类中写一个接口静态用户返回创建后的对象但只能调用一次因为是需要时才会创建所以需要考虑线程安全问题保证多线程下只能创建一个对象
lock;Singleton(){pthread_mutex_init(lock,nullptr);}~Singleton(){pthread_mutex_destroy(lock);}Singleton(const
就是懒汉方式也就是系统运行中实例并不存在只有当需要使用该实例时才会去创建并使用实例。
这种方式要考虑线程安全问题
如果多个单例类对象在程序启动时实例对象的顺序不确定。
如果对象之间有依赖关系就麻烦了。
多个单例类对象实例化的顺序可以确定。
取决于调用类的函数的顺序。
悲观锁在每次取数据时总是担心数据会被其他线程修改所以会在取数据前先加锁读锁写锁行
锁等当其他线程想要访问数据时被阻塞挂起。
乐观锁每次取数据时候总是乐观的认为数据不会被其他线程修改因此不上锁。
但是在更新数据前
会判断其他数据在更新前有没有对数据进行修改。
主要采用两种方式版本号机制和CAS操作。
CAS操作当需要更新数据时判断当前内存值和之前取得的值是否相等。
如果相等则用新值更新。
若不等
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback