Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » Community » Coffee corner » Thoughts about alternative approach to multithreading
Re: Thoughts about alternative approach to multithreading [message #19203 is a reply to message #19201] Thu, 20 November 2008 10:19 Go to previous messageGo to previous message
Mindtraveller is currently offline  Mindtraveller
Messages: 917
Registered: August 2007
Location: Russia, Moscow rgn.
Experienced Contributor

If I understand your example right...
class CachedSQL : public CallbackThread
{
public:
	void GetDataGiveToAnswerer(String request)
	{
		int rqIndex = data.Find(request);
		bool needAdd = false;
		String answer;
		if (rqIndex < 0)
		{
			answer = FetchFromDatabase(request);
			needAdd = true;
		}
		else
			answer = data[rqIndex];
		
		theAnswersProcessor.AddTask(HttpAnswersProcessor::ProcessData, request, answer);
		
		if (needAdd)
			data.Add(request, answer);
	}
};

class HttpRequestsProcessor : public CallThread
{
public:
	void ProcessHttpRequest(String rq)
	{
		//some processing here
		
		//ok, you need users`s info
		theCachedSQL.AddTask(CachedSQL::GetDataGiveToAnswerer, user);
		
		//optional additional processing
	}
};

class HttpAnswersProcessor : public CallThread
{
public:
	void ProcessHttpAnswer(String userInfo)
	{
		//some processing and sending answer
	}
};

///////////////////////////////////////////////////////////////////////////
// Let`s imagine 2 users sent their requests simultaneously.
//
// Time offset:
// 0         1        2         3         4         5         6         7
// 0123456789012345689012345678901234567890123456789012345678901234567890
//--------------------------------------------------------------------------
// Synchronous work
// |--request1--|--sql1--|--answer1--|--request2--|--sql2--|--answer2--|...
// user1 will wait 3.5
// user2 will wait 6.9
//--------------------------------------------------------------------------
// Asyncronous work; '%' symbol stands for queue event i/o/thread-awake
// |--request1--|
//            %|--sql1--| *cache-miss; adding to data AFTER answer answer sent to httpAnswerer*
//                   %|--answer1--|
//              |--request2--|
//                         %|--sql2--| *value cached, no need to add this time*
//                                   %|--answer2--|
// user1 will wait 3.2
// user2 will wait 4.8
//--------------------------------------------------------------------------


 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: subversion client recommendation
Next Topic: Google Chrome Operative System
Goto Forum:
  


Current Time: Mon Jul 07 10:46:32 CEST 2025

Total time taken to generate the page: 0.03751 seconds