glib库异步队列和线程池代码分析
来源:互联网 发布:java堆栈 编辑:程序博客网 时间:2024/06/05 13:53
现在可以结合流程图分析线程池中创建一个线程的一个情景:从函数g_thread_pool_new的while循环调用了 g_thread_pool_start_thread函数,在函数中直接调用g_thread_create创建线程,被创建的线程调用函数 g_thread_pool_wait_for_new_task循环等待任务的到来,函数 g_thread_pool_wait_for_new_task调用g_async_queue_pop_unlocked (pool->queue)真正进入等待。如此可知,最终新创建的线程是调用异步队列的pop接口进入等待状态的,这样一个线程的创建就大功告成 了。而函数g_thread_pool_new的while循环结束时就创建了max_threads个等待线程,也即这个新建的线程池对象有了 max_threads个线程以备使用。
创建线程池、线程池中的线程是为了使用它,在线程池中取线程,叫线程干活的过程就很简单多了,这个调用过程:g_thread_pool_push--à g_thread_pool_queue_push_unlocked--à g_async_queue_push_unlocked。可见最终调用的是异步数据队列的push接口,把要处理的数据插入队列后它就会唤醒等待异步队列数据的等待线程。
总结:单个线程池对象不共享方式在管理多线程时是以线程池对象中的异步队列为中心,新创建的线程或做完任务的线程并不释放,让它调用异步队列的pop接口进入等待状态,而在使用唤醒线程池中的线程就是调用异步队列的push接口。
以上对于理解线程池的实现已经足够,多个线程池对象共享线程方式和具体线程池的销毁的技巧,在这里就不讨论了。
- glib库异步队列和线程池代码分析
- glib库异步队列和线程池代码分析
- glib库异步队列和线程池代码分析
- glib库异步队列和线程池代码分析
- glib库线程池代码分析
- glib学习笔记之四——GLib核心应用支持:glib库线程池代码分析
- 单线程和异步队列
- java线程池和队列分析
- java线程池和队列分析
- 简单理解异步、线程池和队列的作用
- glib的线程池
- glib 线程池 thread_pool
- glib库队列GQueue介绍
- glib库队列GQueue介绍
- 线程池和异步线程
- java线程池和消息队列的运行流程分析
- java 线程池 队列分析
- 线程池与线程队列分析-优
- c#中TreeView,ListView,Splitter控件
- 2013.12.10SQL性能优化
- ubuntu系统屏幕亮度不能保存问题
- 重置MyEclipse,解决无法启动或者SVN无法同步等问题
- 找第一份工作时最需要考虑的因素是什么
- glib库异步队列和线程池代码分析
- 工作文件丢失怎么恢复
- Android 随手记----从服务器下载文件保存到sd卡
- slideDown(),slideUp()在IE无效果
- 生成R语言包的方法
- C++经典面试题(4)
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!
- 为什么要进行安全性测试?
- linux下使用vim编辑文本文件时显示^M的解决办法