Go言語についてはかなり読んだことがあります。気に入らなかったことがたくさんあります。日常生活で使いたくないほどです。しかし、私が本当に好きな言語については、ゴルーチンが1つあります。
私はそれをCで実装する方法を考えていました。これまでのところ、インターネットで見つけることができる最高のものは
#define go if (!fork()) for(;;exit(0))
そうすれば、関数呼び出しの前にgoを付けることができます。
go printf("Hello, world!\n");
別のスレッドで実行され、次のようになります。
go { printf("Hello, world!\n"); foo(); bar(); baz(); }
しかし、もちろん、fork()には速度の問題があります。(私のボックスでは、fork()はprintf()の7倍の時間がかかり、rdtsc x86命令を使用してベンチマークされ、コア間の切り替えやスケジュールの可能性を排除するために数回実行されます。)
だから、私の質問は、これをより速く実装するためのより良い方法はありますか?