Regarding this subject, first question I would like to ask is why one need concurrency? My one line answer would be “As we go into the future, number of cores available on even desktops will increase dramatically”. That’s why one need to think in terms of parallel operations instead of serial operations. Many libraries are already there to achieive this like MPM.
In my opinion, these libraries are hard to use and still need to deal with the underlying network architecture. But it is not necessary. It can be achieved without getting into the low level functions. Only thing is require is “changing the way we think of designing the system”.
Functional is my answer to this problem. Just thinking functional is not enough. But one should get the real feel of it. One need to forget everything he/she knows and start thinking like a child. Start to learn things from the begining.
When I started thinking functional, even though I was thinking functional but that functional always turned out to be serial. Then I got introduced to this wonderful language called “Erlang”. This really force one to think and do things not only in functional but do things in concurrency.