worker_thread
简介
提供gs线程池功能,可以把一些独立的工作分发到不同的线程中处理,不阻塞当前线程
需求
有些基于ffi实现的接口或者一些io相关的外部函数,如果直接在默认的并行协程调度器中调用会阻塞,会导致调度器的线程耗尽,所以希望有一个worker_thread的框架,可以把任务抛到另外的线程处理,当前协程走正常的pending流程,自己切出,把并行调度器的线程分给其他协程使用,当前协程进入sleep
状态, 等待协程池处理完成后返回, 可以获得处理结果
应用场 景
各个协程都可能执行,且可能会导致当前线程卡很久且无法将当前协程pending的操作,比如数据库读写,文件读写等操作
对比
与copool
的区别:
两者目标不同,worker_thread是为了防止并行调度器的os线程耗尽,copool的目的是防止协程过于频繁创建销毁
使用示例
// 获取线程池 worker
import pkg.worker_thread;
object workers = worker_thread.create_worker("work", 10);
// 将函数传入线程池, 并等待
mixed res = workers.run((: run_func :));