跳到主要内容

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();
}