C++任务队列与多线程
作者:网络转载 发布时间:[ 2013/3/25 13:45:10 ] 推荐标签:
异步是性能优化非常重要的手段,下面如下场合可以使用异步:
● 服务器程序要求很高的实时性,几乎逻辑层不执行io操作,io操作通过任务队列被io线程执行成功后再通过回调的方式传回逻辑层。
● 网游中用户登录,需呀从数据库载入用户数据,数据库层不需要知晓逻辑层如何处理用户数据,当接口被调用时必须传入回调函数,数据库层载入数据后直接调用回调函数,而数据作为参数。
隐式任务队列
使用任务队列可以解耦多线程的设计。更加的使用是将其封装在接口之后。前边的例子中都是显示的操作了任务队列对象。但这限制了用户必须知道某个接口需要绑定哪个任务队列上,尤其是多线程多任务队列的例子,如果当用户操作socket接口时还要知道socket对应哪个任务队列显得不够优雅了。Socket自己本身可以保存对应任务队列的引用,这样使用者只需调用socket的接口,而接口内部再将请求投递到争取的任务队列。示例代码:
void socket_impl_t::async_send(const string& msg_)
{
tq.produce(task_binder_t::gen(&socket_impl_t::send, &this, msg_));
}
void socket_impl_t::send(const string& msg_)
{
//do send code
}
总结:
● 设计多线程程序时,往往设计使用任务队列是关键,好用、高效、灵活的任务队列组件十分必需,本节介绍的实现支持多种多线程模式,易用易理解。
● 异步回调在多线程程序中非常常见,异步往往是为了提高性能和系统吞吐量的,但是异步其不可避免的会带来复杂性,所以尽量保证异步相关的步骤简单。
● 任务队列封装对象接口的内部更佳,使用者直接调用接口,仿佛没有任务队列这回事,让他在看不见的地方默默运行。
● 本节设计的任务队列是线程安全的,并且关闭时已经投递的任务能够保证被。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11