fridgethr(fridge thread)是一個叫Philippe設(shè)計的工作者/消費者模型,在2.7的修改中一部分被work pool代替反浓。之所以叫fridge,是當線程無事可做的時候被freeze住磷斧。參考
fridgethr是nfs-ganesha提供的
work pool是ntiprc提供的
函數(shù)
- fridgethr_init
- fridgethr_submit 生產(chǎn)者
使用場景
pooling
struct fridgethr_params frp;
frp.thr_max = 1;
frp.thr_min = 1;
frp.thread_delay = reaper_delay; //每次循環(huán)中間delay的時間
frp.flavor = fridgethr_flavor_looper;//在線程中循環(huán)調(diào)用給定函數(shù)
rc = fridgethr_init(&reaper_fridge, "reaper", &frp);
rc = fridgethr_submit(reaper_fridge, reaper_run, &reaper_state); //循環(huán)調(diào)用reaper_run
worker
//init
frp.thr_max = 1;
frp.deferment = fridgethr_defer_queue;
rc = fridgethr_init(&state_async_fridge, "State_Async", &frp);
//submit
rc = fridgethr_submit(state_async_fridge, state_async_func_caller, arg);
//用作worker thread
rc = fridgethr_populate(worker_fridge, worker_run, NULL);