network_copool
简介
管理用于处理网络消息的协程池对象
组件接口
NetworkCo.gs
提供处理网络消息的独立协程的对象
函数原型 | 函数作用 |
---|---|
bool is_network_co() | 是NetworkCo的实例 |
void dispatch(mixed msg) | 发送消息到协程对象的消息队列中 |
coroutine get_co() | 获取本对象的消息处理协程 |
NetworkCoPool.gs
处理网络消息的协程池对象
函数原型 | 函数作用 |
---|---|
string get_name() | 获取协程池名字 |
void set_cache_size(int cache_size) | 设置缓存池大小 |
object new_co(function entry_func) | 从池子中借用一个协程对象,如果池子为空,则新创建一个 |
void delete_co(object ob) | 向池子归还一个协程对象,如果池子满了,则将对象销毁 |
void fix() | 维护接口,当池子内协程数量超过上限时(异常的并发导致)将销毁多余的协程对象 |
network_copool.gs
函数原型 | 函数作用 |
---|---|
object create_pool(string name, map para) | 创建一个处理网络消息的协程池对象 |
void destroy_pool(string name) | 销毁指定名称的协程池 |
object new_co(string name, function handle_func) | 在指定名称的协程池里申请一个用于网络消息处理协程对象 |
void delete_co(string name, object co) | 删除指定名称的协程池中的指定协程对象 |
样例
import pkg.network_copool;
public void test()
{
string name = "test";
// 创建一个协程池
object pool_ob = network_copool.create_pool(name, {
"cache_size" : 32,
"wait_warn_time" : 5f,
"execute_warn_time" : 3f
});
defer {
network_copool.destroy_pool(name);
}
sync_object semaphore = sync_object.create_semaphore();
// 申请一个协程对象
object co = network_copool.new_co("test", (: process_one :));
int N = 100;
for (int i = 1 upto N)
{
// 模拟消息
function func = parallel () {
printf("number = %d\n", i);
semaphore.give();
};
co.dispatch(func);
}
for (int i = 1 upto N)
semaphore.take();
// 归还协程对象
network_copool.delete_co(name, co);
}
parallel void process_one(function func)
{
func.call();
}