Last week i was reading an article on multi-threaded programming and suddenly some thoughts pop out of my mind which i thought of sharing with people. In large enterprise level applications, its mandatory that we need to implement the multithreaded feature in each and every component that has been involved in it. But we should think whether we are really using the same. Without writing multi-threaded and parallel programming there is no point in increasing the amount of silicon cores speed which is being provided by Intel and AMD processors.
I was talking with some of the key developers and most of the people are very reluctant to write a multithreaded code either due to the complexity involved in it or due to the client pressure in terms of case industry. One person was saying that it is not easily understandable by clients and so we are not going for the same and this answer is not giving me a justice as a software engineer. I am really concerned on how they are managing the memory and the performance degradation that is being caused due to the single threaded approach. People are either lazy or reluctant to write multithreade programming which includes me as well.
We are not unleashing the power of multithreaded programming and there by utilising the full potential of dual core parallel processors from Intel and AMD. People are talking about the automatic memory management and garbage collection been given by Java and .Net platform, but we should think in terms of enterprise level applications where in which the performance plays a major role. I am not going to confuse memory management with multithreaded programming here, but my only concern in as we are not using the multithreaded programming to the extent it is available, we are finally landing up in purchasing more hardware in order to increase the performance. So from the above statement it is clear that both are interrelated even though automated memory management and garbage collections are in place.
I would strongly recommend people to make use of multithreading and virtualisation methodologies. However it is tough to write an application which is 100% thread safe. Also it will take 90% more time to develop an application using a multithreaded approach when compared to a normal approach. But if we lose focus on this 90%, we will end up in losing the potential of multithreaded approach being provided in the languages. Since the language developers themselves felt that the automatic memory management alone is not that enough to create a high performance computing application, they have introduced the concept of Multithreading.
The main problem i saw is, people are not feeling that comfortable in writing the threaded application as it is little complex and more over it is not straight forward and we need to consider multiple combinations in order to ensure the thread safety. But once we formed a base framework on these things, we can unleash the full potential and can create applications which are thread safe, more robust and can gain a huge amount of performance improvement.
As people are feeling a difficulty in writing the threaded application, we can also think of writing tools and techniques in order to write a threaded application simply. May be we can have a thread framework, (already we have a similar kind of that one only), kind of concept on top of the already esiting thread APIs which will abstract the internal thread related APIs from the programmer and can allow the programmer to easily create and maintain the thread based applications, there by making the life of the thread based programmers life simple.
Lets start Threading :)