サイズがあまりに大きくなってしまったので、gist ではなくて github 上で管理するようにしました。
https://github.com/Shinpeim/process-book
URL 変わっちゃうの申し訳ないんだけど、一覧性が高くなるのと pull req が受け取れるメリットのほうを取ります。せっかく読みにきてくれたのにひと手間かかっちゃってすみません。
// https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works | |
package main | |
import ( | |
"fmt" | |
"golang.org/x/crypto/ssh" | |
) | |
const privateKey = `content of id_rsa` |
サイズがあまりに大きくなってしまったので、gist ではなくて github 上で管理するようにしました。
https://github.com/Shinpeim/process-book
URL 変わっちゃうの申し訳ないんだけど、一覧性が高くなるのと pull req が受け取れるメリットのほうを取ります。せっかく読みにきてくれたのにひと手間かかっちゃってすみません。
@voluntas
0.3.3
2014 年 10 月 30 日に行われる 歌舞伎座.tech#5「すごいErlangをゆかいに学ぶ会」 の発表資料です
gogoutineてGOMAXPROCSを設定しない限りはシングルスレッドなんですねえ。 | |
GOMAXPROCSはもうちょっとだけ複雑です。 | |
同時に動けるgoroutineの数の制限なのですが、 | |
read などのブロックするかもしれないシステムコールを発行する場合、発行前に「現在実行中のゴルーチン数」をデクリメントして、 | |
システムコールから返ってきたらそれをインクリメントします。 | |
で、デクリメントした時に、他に動けるスレッドがいなかったらスレッド起動して、他のgoroutineが動けるようにします。 | |
他のスレッドがすでにあって眠っていたら、それを起こしてgoroutineを実行させます。 | |
なので、ブロックする処理としない処理を混ぜてもいい感じに動くのです。 | |
で、その、スレッドを作ったり起動したりするのが実はちょっとだけ重いので、ベンチマーク結果を良くするためにはその処理が走らないように、 |
package main | |
import ( | |
"os" | |
"syscall" | |
) | |
func main() { | |
oldMask := syscall.Umask(0) | |
os.Mkdir("hoge_01", 01777) // NG |