在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。最好有選股公式!