前段時間實現的c協程依賴棧傳遞引數,在開啟優化時會導致錯誤,於是實現了乙個ucontext的版本,但ucontext的切換效率太差了,
在我的機器上執行4000w次切換需要11秒左右,這達不到我的要求,所以重新設計了實現,使得在開啟優化時也能得到正確的結果.
並且效率也令人滿意,4000w次切換僅需要730ms左右,足足比ucontext的實現快樂近15倍。
下面貼出實現:
#include "uthread.h
"#include
#include
#include
#include
"link_list.h
"struct
uthread
;#ifdef _debug
//for debug version
void
uthread_main_function()
#else
//for release version
void __attribute__((regparm(1))) uthread_main_function(void *arg)
#endif
uthread_t uthread_create(uthread_t parent,
void*stack,uint32_t stack_size,void*(*fun)(void*))
if(u->main_fun)
u->first_run = 1
;
returnu;}
void uthread_destroy(uthread_t *u)
#ifdef _debug
void* __attribute__((regparm(3))) uthread_switch(uthread_t from,uthread_t to,void *para)
else
return
from->para;
}#else
void* __attribute__((regparm(3))) uthread_switch(uthread_t from,uthread_t to,void *para)
else
return
from->para;
}#endif
test.c
#include #include"uthread.h
"#include
"systime.h
"#include
void* ufun2(void *arg)
return
null;
}char *stack1;
char *stack2;
void* ufun1(void *arg)
printf(
"%d\n
",getsystemms()-tick);
uthread_switch(self,u,null);
return
arg;
}int
main()
;
程序 執行緒 協程對比
請仔細理解如下的通俗描述 有乙個老闆想要開個工廠進行生產某件商品 例如剪子 他需要花一些財力物力製作一條生產線,這個生產線上有很多的器件以及材料這些所有的 為了能夠生產剪子而準備的資源稱之為 程序 只有生產線是不能夠進行生產的,所以老闆的找個工人來進行生產,這個工人能夠利用這些材料最終一步步的將剪子...
Kotlin 協程輕量 協程與執行緒對比
本例使用協程和執行緒兩個方式執行一段任務 協程 任務是每秒列印出兩個 執行100 000個任務 test fun testmet runblocking println val end system.currenttimemillis println end time end println 耗時 ...
c語言實現的協程
這幾天突然對協程感興趣,於是自己實現了乙個,放在github上 協程是一種使用者空間的非搶占式執行緒,主要用來解決等待大量的io操作的問題。協程vs執行緒 對比使用多執行緒來解決io阻塞任務,使用協程的好處是不用加鎖,訪問共享的資料不用進行同步操作。這裡需要說明的一點是,使用協程之所以不需要加鎖不是...