5å¹´åã«è²·ã£ããJava並è¡å¦çããã°ã©ãã³ã° âãã®ãåºç¤ãã¨ãææ°APIããç©¶ããâããããããèªãã ãè²·ã£ãé ã«ã¯ Perl ãã·ã³ãã«ãª JavaScript ã°ããæ¸ãã¦ããã®ã§ä¸¦è¡ããã°ã©ãã³ã°ãªãã¦ã»ã¨ãã©æ°ã«ãããã¨ããªãã宿ããªãã¦èªãã®ãéä¸ã§æ¢ã¾ã£ã¦ãã¾ã£ã¦ããæ¬ã§ãå®¶ãæé¤ãã¦ããã¨ãã«è¦ã¤ãããã®ããã®å¾ãè¶£å³ã§ Android ã¢ããªãæ¸ããªã© Java ã«è§¦ããæ©ä¼ã¯ãã£ãããã©ãããããã AsyncTask ã使ããããã§ããã«ãã¹ã¬ãããå¼·ãæèãã¦ã³ã¼ããæ¸ããã¨ããªãã£ãã

Java並è¡å¦çããã°ã©ãã³ã° âãã®ãåºç¤ãã¨ãææ°APIããç©¶ããâ
- ä½è : Brian Goetz,Joshua Bloch,Doug Lea
- åºç社/ã¡ã¼ã«ã¼: ã½ãããã³ã¯ã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2006/11/22
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 30人 ã¯ãªãã¯: 442å
- ãã®ååãå«ãããã° (176ä»¶) ãè¦ã
ã¨ãããããæ°å¹´ã§ Go ãæ¸ãã¯ããã¦ä»¥æ¥ãããã¨æ°ã¥ãã¬éã«ä¸¦è¡å¦çãããã°ã©ã ããããã«ãªã£ã¦ããã®ãããã£ãããããä»ã ã¨ããããã®ãããã¯ã身è¿ã«æãã¦è峿·±ãèªãããGo ã® race detector ãåªç§ã§ããããã¼ãªã³ã¼ãã®ççµãææããã¦ãããã¡ã«æè¦ã身ã«ã¤ãã¦ããã®ã ã¨æãã
ãShare Memory By Communicatingãã¨ããã¹ãã¼ã¬ã³ã§ãã表ããããããã«ãGo ã®ä¸¦è¡ API ã¯ãã£ã³ãã«ã¨ goroutine ã«ãããã®ã§ãããªãç°¡ç´ ã«ã§ãã¦ããã䏿¹ Java ã¯synchronized 修飾åãã¯ãããObject#wait / notify ã¨ããã¤ã³ã¿ã©ããã®ä»çµã¿ãªã©ããã¬ã¼ã ã¯ã¼ã¯ã¨ãå¼ã¹ããããªä»çµã¿ãç¨æããã¦ãã¦ã対ç
§çã ã£ãããããããã¯è¨ã£ã¦ã goroutine éã§å¤æ°ãå
±æããããã¨ã¯ Go ãæ¸ãã¦ãã¦ãé »ç¹ã«ããããã§ãåèã«ãªãã¨ããã¯å¤ãã
ãã®æ¬ã§ã¯æ£ãã並è¡å¦çãè¡ãããã«ã
- ãã¼ã¿ã®ä¸å¤é ãã«ãã»ã«åãããããæ§æãã夿°ãåãããã¯ã§ã¬ã¼ããããã¨
- API ã®åæåããªã·ã¼ãããã¥ã¡ã³ããããã¨
ãæ¨å¥¨ãã¦ãããç¹ã«å¾è ãå©ç¨è 㯠API ã®å½¢å¼çãªæ å ±ãããã®ã¹ã¬ããã»ã¼ãæ§ã夿ãããã¨ãã§ããªãããã ãGo ã®æ¨æºã©ã¤ãã©ãªã§ãã並è¡å¦çã«é¢ãããããªã¨ããã§ã¯ãã®æ¨ããã¥ã¡ã³ãããã¦ããã¿ããã ã
% go doc strings.Replacer
type Replacer struct {
// Has unexported fields.
}
Replacer replaces a list of strings with replacements. It is safe for
concurrent use by multiple goroutines.
% go doc net/http2.Framer.WriteData
func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error
WriteData writes a DATA frame.
It will perform exactly one Write to the underlying Writer. It is the
caller's responsibility to not call other Write methods concurrently.
以ä¸ãä¸è¬çãªä¸¦è¡å¦çã®æ§ç¯é¨æï¼ãã«ãã£ã³ã°ãããã¯ï¼ã Go ã§ã©ãå®ç¾ãããã®ãã¿ã¼ã³ãã¡ã¢ãã¦ãããGo çã«ã¯ãããã£ãå¦çã¯ã©ã¤ãã©ãªåããã®ã§ã¯ãªãã³ãããããã¯ã¤ãã£ãªã ã¨ãã¦æ¶ãã¦ããã®ãæ£ããæ åº¦ã ããã®ã§ãé度ã®ä¸è¬åããããã¨ãã¦ã¯ãããªãã
è¦èããã¦ç¥ã£ã¦ãããã¨ããã¨ã«ã§ããã ãçæ¯ã«æ¸ãããç¾å®ä¸çã®ä¸¦è¡ããã°ã©ãã³ã°ã«è©³ããããã§ã¯ãªãã®ã§ééã£ã¦ãããã¨ããããããããªãã
ãã¥ã¼ããã¯ã¹ï¼Mutexï¼
ãã¥ã¼ããã¯ã¹ã¯è¤æ°ã®ã¹ã¬ããéã§å
±æãããªã½ã¼ã¹ã®ã¢ã¯ã»ã¹æ¨©ã管çããé¨åãããã¯ãã®ã¾ã¾ sync.Mutex ã¨ããã®ãåå¨ããããã£ã³ãã«ã«ä¾ããªãåæãè¡ãã®ã«ããã¸ãéè¦ãªã§ããªããã£ããªé¨åã ã
sync.Mutex 㯠zero value ãæªããã¯ã表ãã¦ãã¦ãç¹å¥ãªåæåãå¿
è¦ã¨ããªãã®ã§æ§é ä½ã«åãè¾¼ããã¨ãã§ããã
type syncMap struct { sync.Mutex m map[string]string }
ãªã©ããã®æ§é ä½ s ã®ãã£ã¼ã«ãã夿´ããåã¨å¾ã« s.Lock() 㨠s.Unlock() ãå¼ã¶ããå¾¹åºã§ãã¦ããã°ããã®æ§é ä½ã¯ goroutine ã»ã¼ãã ã¨è¨ããããã¡ãããããã®ãã£ã¼ã«ãã¯ãã©ã¤ãã¼ãã«ãã¦ããã¹ãã§ããã
æ§é ä½ãä½ãã»ã©ã§ã¯ãªãæã¯ãå®ããã夿°ã¨ä¸¦ã¹ã¦å®£è¨ãã¦ãããåãæ¬å¼§ã®ä¸ã«å ¥ããã¨ããããã¨æããMutex ã® Go ã«ãããçãååã¯ãmuãã§ããã
var ( cache map[string]string cacheMu sync.Mutex )
Read-Write ããã¯ãå®ç¾ããããã® RWMutex ã¨ããã®ãããã
ã©ããï¼Latchï¼
ã©ããã¯æ¡ä»¶ãæ´ãã¾ã§ã¹ã¬ããã®å®è¡ãçãã¦ããããã®é¨åããã¨ãã°å ¨ã¦ã® HTTP GET ãçµãã£ã¦ãã¼ã¿ãæãã¾ã§ã¯å¾ æ©ãããã¨ãããããªã¨ãã«ä½¿ãã
ãã㯠Go ã«ããã¦ã¯ sync.WaitGroup ã¨ããååã§æä¾ããã¦ãããããã zero value ã§æå³ãæã¤ã®ã§ãvar wg sync.WaitGroup ã¨å®£è¨ãã¦ä½¿ãã
å ¸åçã«ã¯ä»¥ä¸ã®ããã«ä½¿ãããã
var wg sync.WaitGroup for _, arg := range args { wg.Add(1) go func(arg string) { longRunningTask(arg) wg.Done() }(arg) } wg.Wait() ...
WaitGroup ã® Go ã«ãããçãååã¯ãwgãã§ãããã¡ãªã¿ã«è¤æ°ã® goroutine ãèµ·åãã¦ãã¹ã¦ã®å¦çãå®äºããã¾ã§å¾ ã¤ã¨ãããã®æ°ããããããããã£ã¦ããå ´åã¯ãçµæãéç¥ãããã£ã³ãã«ãå©ç¨ãããã¨ãããã
c := make(chan struct{}, 4) for i := 0; i < 4; ++i { go doJob(i, c) // çµãã£ãã c <- struct{}{} ããã } for i := 0; i < 4; ++i { <-c }
ããããã³ã°ãã¥ã¼ï¼Blocking Queueï¼
æéã¾ãã¯ç¡éã®ãã£ãã·ãã£ãæã¤ãã¥ã¼ã§ããã£ãã·ãã£ãè¶ãã¦è¿½å ãããã¨ããã¨ãåã³ç©ºã®ç¶æ ã§åãåºããã¨ããã¨ãã«ãããã¯ããã2ã¤ã®ããã»ã¹ã§ãªã½ã¼ã¹ã®æææ¨©ãç§»åããªããåæåã§ããã
Go ããã¦ã¯ããããããã£ã³ãã«ï¼chanï¼ãèªæãªã®ã§ã³ã¼ãã¯ç¹ã«ãªãããã£ã³ãã«ã® Go ã«ãããçãååã¯ãcãã§ããï¼ãchãããªãããã§ã¯ãªãï¼ã
ã»ããã©ï¼Semaphoreï¼
ï¼è¨æ°ï¼ã»ããã©ã¯æ±ºã¾ã£ãæ°ã®ããã»ã¹ã ããåæã«ä¸¦è¡ã«èµ°ã£ã¦ãããã¨ããå¶éãè¨ããããã®ãã®ããã¨ãã°éå°ãª IO ãé¿ããããã«å©ç¨ãããã
Go ã«ããã¦ã»ããã©ã¯ãã£ãã·ãã£ããã®ãã£ã³ãã«ã¨ãã¦å®è£ ã§ããã
var sem = make(chan struct{}, maxConcurrency) func process(arg string) { sem <- struct{}{} ... <-sem } func run() { for _, arg := range args { go process(arg) } }
ããåãã¦è¦ãã¨ãã¯ããåãããªãã£ããã»ããã©ã® Go ã«ãããçãååã¯ãsemãã§ããã
Future
Future ï¼ã«ã¿ã«ãã§æ¸ããªãæ°ãããï¼ã¯å¾ã å¿ è¦ã«ãªãå¤ã®è¨ç®ã IO ããããããã¹ã¿ã¼ãããã¦ãããããããªå ´åã«ä½¿ããã¿ã¼ã³ãçµæãåå¾ããã¨ãã«ãããã¯ããã¦å¾ ã¤ãã¨ãã§ãããèªåã¯å®éã«æ¸ãããèªãã ãããçµé¨ã¯ãªãã®ã ãã©ãFuture ãã¿ã¼ã³ãæèãã¦æ¸ããªããããªé¢¨ã«æ¸ããã¨æãã
struct futureInt { result int done chan struct{} } func (fut *futureInt) Get() int { <-fut.done return fut.result } func calcInt() futureInt { fut := futureInt{ done: make(chan struct{}), } go func() { fut.result = longRunningTask() close(fut.done) } return fut }
ããªã¤ï¼Barrierï¼
ãã¡ãã¯åèã¾ã§ã«è¨ãã¦ãããJava ã® CyclicBarrier ã¨ããã¯ã©ã¹ã¯åå©ç¨ã®ã§ããã©ããã®ãããªãã®ã§ãã¹ã¬ãã群ãç¹°ãè¿ãåæåãããããªå ´åã«ä¾¿å©ãããã
æ¤ç´¢ãã㨠sync.Cond ã使ã£ããã¾ãç°¡åã§ã¯ãªãä¾ãè¦ã¤ããã®ã ããgolang-dev ã«ã¯ goroutine ã¯åå軽éã ããæ¯åæ°ããã®ãèµ·åãããããã ã¨ãã£ã話ãããããã£ã¡ã®ã»ãã Go ãããããã«ãæã£ãã
ã¾ã¨ã
ããã°ã©ã è¨èªã®è©±ã«éãããããé åã®è¦èãçµé¨ãæ·±ãããã¨ã§ã¯ä»ã®é åããå¾ãããç¥èã®å¸åã®ä»æ¹ã®è³ªãç°ãªããã®ã§ãæã£ãããåèã«ãªã話ãå¤ãã£ããã¨ã¯ãã Go ã«ã¯ Go ã®ããæ¹ããããã®ãªã®ã§ããã¾ã Java ã«ãããã¯ã©ã¹ããã¿ã¼ã³ããã®ã¾ã¾æµç¨ãããã¨ããã®ã¯ãããªãå¾åã§ãããã¨ãæèãã¦ãããªããã°ãªããªããGo ãèªã¿æ¸ãããéã«ã¯ï¼ãã¿ã¼ã³ã¨ããã»ã©ã§ããªãï¼ã¤ãã£ãªã ãç¥ã£ã¦ãããã¨ã«æå³ãããè¨èªãªã®ã§ããããã£ã¦ã¾ã¨ãã¦ãããã¨ãç¡é§ã§ã¯ãªãã ããã¨æãã
åèæç®

Java並è¡å¦çããã°ã©ãã³ã° âãã®ãåºç¤ãã¨ãææ°APIããç©¶ããâ
- ä½è : Brian Goetz,Joshua Bloch,Doug Lea
- åºç社/ã¡ã¼ã«ã¼: ã½ãããã³ã¯ã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2006/11/22
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 30人 ã¯ãªãã¯: 442å
- ãã®ååãå«ãããã° (176ä»¶) ãè¦ã

å¢è£æ¹è¨ç Javaè¨èªã§å¦ã¶ãã¶ã¤ã³ãã¿ã¼ã³å ¥é ãã«ãã¹ã¬ããç·¨
- ä½è : çµå浩
- åºç社/ã¡ã¼ã«ã¼: ã½ãããã³ã¯ã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2006/03/21
- ã¡ãã£ã¢: 大忬
- è³¼å ¥: 15人 ã¯ãªãã¯: 287å
- ãã®ååãå«ãããã° (204ä»¶) ãè¦ã
- Effective Go, Concurrency
- 読んだ: Java 並行処理プログラミング / ブライアン・ゲーツ、ダグ・リー、他 著、岩谷宏 訳 - ひだまりソケットは壊れない
- Go の並行処理 - Block Rockin’ Codes
- Go ã®ã½ã¼ã¹ã³ã¼ããGo ãã¼ã«ã®ã½ã¼ã¹ã³ã¼ã
- å®ä¾ã¸ã®ãªã³ã¯ãç¨æããã®ãé¢åã ã£ãã®ã§ã§ããªãã£ããã©ãå®è£ ã夿°åã¯ã ãããããããå¼ãã¦ãã¦ããã
