C協程實現的效率對比

2022-02-24 04:39:17 字數 1569 閱讀 9837

前段時間實現的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阻塞任務,使用協程的好處是不用加鎖,訪問共享的資料不用進行同步操作。這裡需要說明的一點是,使用協程之所以不需要加鎖不是...