當前位置:編程學習大全網 - 網站源碼 - 如何讓cgo調用繞過線程池

如何讓cgo調用繞過線程池

在go語言中,可以通過cgo調用C庫。但是由於goroutine的機制,外部的C函數調用可能能夠很快返回或者執行很長時間。為了防止goroutine調度被阻塞,對於每個要執行的cgo調用,總是從線程池中取出壹個線程,然後在完成後返回原來的goroutine。這樣,每次cgo調用都會帶來巨大的開銷。所以很多go的庫在實現的時候,並沒有包裝C庫,而是選擇完全使用go。這使得go少了大量現有的C庫可用。

看了go的代碼,發現不通過線程池調用也能進行cgo調用,不是很麻煩,於是自己修改了cgo命令。如下面的代碼所示。

package cgo//// int add(int a,int b){//int ret = a+b;//返回ret// }//import "C"func CAdd(a,b int)int { return int(C . add(C . int(a),C . int(b))} func ASM CAdd(a,b int)int { return int(C . add(C . int(a),C.int(b)))}

C.add是傳統的cgo調用方法。C.add被修改。

  • 上一篇:$(this).parents(".ex").hide("slow"); 這個Jquery代表什麽意思啊
  • 下一篇:怎麽快速選出月線是這個形態的個股?通達信!月線周期是5、10、20。最好有選股公式!
  • copyright 2024編程學習大全網