Concurrency vs Parallelism
2006 yılında Intel dual core CPU’yu ilk defa genele çıkardı ve kullanıcılara açtı [1]. Elbette çok çekirdekli işlemciler o yıl çıkmadı ama bu kadar yaygınlaşması, en azından herkesin bilgisayarında, bu tarihlerde başladı. Go programlama dili ise Google’da 2007 yılında tasarlanmaya başlandı. Go, en baştan beri çok çekirdekli işlemcileri native olarak desteklemeye çalışan bir dil oldu, yani bunlardan maksimum faydalanamaya çalışan dil oldu. Diğer dillerin aksine Go’nun kalbine multi-core sistemler yerleşti.
Concurrency, Go’nun kalbinde vardır.
Ama bu konularda concurrency ve parallelism kavramları yakın ama farklı kavramlardır.
Diyelim ki kod yazdık ama tek çekirdekli bir işlemcide çalışıyoruz, bu noktada kodumuz parallel çalışmayacaktır. Ama biz kodumuzu concurrent bir yaklaşımla yazabiliriz.
Concurrency, bir tasarım kalıbı yani design pattern’dır.
Yani parallel çalışabilir ama çalışmak zorunda değildir ama biz kodumuzu böyle bir yaklaşımla yazabiliriz. Concurrent yazılan bir kod, parallel çalışmayabilir bir sistemde, mesela core sayısı bir ise.
Dilin tasarımcılarından Rob Pike tarafından (evet tarafından) yapılan aşağıdaki sunum bu konuda önemli bir kaynaktır.
Concurrency is about dealing with lot of things at once, and parallelism is about doing lot of things at once. Rob Pike
Aşağıdaki videoya da bakılabilir:
ya da