Single Processor Multithreaded Application!!!!!!! Does it Help????????????????? [modified]
-
Hay hi Guys i have a single processor in my system and in my application i create more then 1 thread, so does it enhance my application, as at a given point of time only instruction can be executed, how does it make difference, does it speed up my application, for example i am retrieving 500 web logs from a site, so if i create 10 threads in one go and in each thread i retrieve 1 log i have to make 50 calls at go which will fetch those 500 logs, so will it speed up the downloading or fetching up the logs or should i go with application thread which will fetch 1 by 1, which method will be useful........... or any idea or implimentaion idea.......... i am not concerned about the server bandwidth or speed of my processor, my Question is doing the repetitive work in one thread at a time with multiple time is faster or doing it in multiple threads is faster . P.S. not concerned about UI too thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Thanks Swarup
modified on Tuesday, February 19, 2008 5:12 PM
-
Hay hi Guys i have a single processor in my system and in my application i create more then 1 thread, so does it enhance my application, as at a given point of time only instruction can be executed, how does it make difference, does it speed up my application, for example i am retrieving 500 web logs from a site, so if i create 10 threads in one go and in each thread i retrieve 1 log i have to make 50 calls at go which will fetch those 500 logs, so will it speed up the downloading or fetching up the logs or should i go with application thread which will fetch 1 by 1, which method will be useful........... or any idea or implimentaion idea.......... i am not concerned about the server bandwidth or speed of my processor, my Question is doing the repetitive work in one thread at a time with multiple time is faster or doing it in multiple threads is faster . P.S. not concerned about UI too thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Thanks Swarup
modified on Tuesday, February 19, 2008 5:12 PM
It can helps if you need to have your application front-end no locked up because of some code. for example, you have a UI that launch your log fetching thing, if you do that in a loop (in the default single thread), the UI will be locked until the loop is over. But if you start the fetching thing in a different thread, then your UI will still be alive. When you are dealing with concurrent connection, theoretically yes, it can increase the performance, but in practice, you will have some limitations due to the number of connections allowed, the bottleneck of your connection speed, ...
Maximilien Lincourt Your Head A Splode - Strong Bad
-
It can helps if you need to have your application front-end no locked up because of some code. for example, you have a UI that launch your log fetching thing, if you do that in a loop (in the default single thread), the UI will be locked until the loop is over. But if you start the fetching thing in a different thread, then your UI will still be alive. When you are dealing with concurrent connection, theoretically yes, it can increase the performance, but in practice, you will have some limitations due to the number of connections allowed, the bottleneck of your connection speed, ...
Maximilien Lincourt Your Head A Splode - Strong Bad
Thank you, but i am nt concerned bout UI part, becas i am handling UI in dif thread, i agree about UI, But what i am talking is, executing 100 threads is better or executing 1 thread is better. example 1 thread called 100 times to do the same work (same work each time) OR 10 threas called 10 times to do the same work (same work each time), which method is faster, which method will complete faster, thats wht i am asking............. Thanks again for ur reply...... thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Swarup
-
Hay hi Guys i have a single processor in my system and in my application i create more then 1 thread, so does it enhance my application, as at a given point of time only instruction can be executed, how does it make difference, does it speed up my application, for example i am retrieving 500 web logs from a site, so if i create 10 threads in one go and in each thread i retrieve 1 log i have to make 50 calls at go which will fetch those 500 logs, so will it speed up the downloading or fetching up the logs or should i go with application thread which will fetch 1 by 1, which method will be useful........... or any idea or implimentaion idea.......... i am not concerned about the server bandwidth or speed of my processor, my Question is doing the repetitive work in one thread at a time with multiple time is faster or doing it in multiple threads is faster . P.S. not concerned about UI too thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Thanks Swarup
modified on Tuesday, February 19, 2008 5:12 PM
-
That depends entirely on the Server you are requesting from. If any of those requests will block at the same time that others won't then threads or even Overlapped I/O can, if done reasonably, reduce the total time to receive all 500 items.
led mike
-
Thanks a lot, i am not concerned about the server bandwidth or speed of my processor, my Question is doing the repetative work in one thread multiple time is faster or doing it in multiple threads is faster . P.S. not concerned about UI too
swarup wrote:
i am not concerned about the server bandwidth
swarup wrote:
my Question is doing the repetative work in one thread multiple time is faster or doing it in multiple threads is faster
Let me try to make my point a different way. If you had to do the same thing but all 500 files were on your local hard drive you would likely slow down overall processing by using more than a single thread to open and read the files into memory. Would it be measurable? Likely? Noticeable? Don't know. This is why the only thing that matters significantly is the Server. Of course if you can't depend on Server response being consistent at the various times you will be doing this you would have to develop algorithms to modify the approach dynamically based on Server response. So now what are you going to do?
led mike
-
swarup wrote:
i am not concerned about the server bandwidth
swarup wrote:
my Question is doing the repetative work in one thread multiple time is faster or doing it in multiple threads is faster
Let me try to make my point a different way. If you had to do the same thing but all 500 files were on your local hard drive you would likely slow down overall processing by using more than a single thread to open and read the files into memory. Would it be measurable? Likely? Noticeable? Don't know. This is why the only thing that matters significantly is the Server. Of course if you can't depend on Server response being consistent at the various times you will be doing this you would have to develop algorithms to modify the approach dynamically based on Server response. So now what are you going to do?
led mike
Hi Mike No i dont think so, take a scenario::
main() { thread t; for(i 0 to 100) {time = t.callme();} ///////so to complete will take 100sec // because one call then another call //now this way thread t[10]; for(i 0 to 10) {t[i].callme();} loop another 10 times more //////so will it take 100sec or less or more????????? ////at a given time 10 threads are running,so time taken should nt be 10 sec, right? it should be therotically 1 sec but say for example 5 secs, am i right???it should be less then 10 sec for 10 threads /////so what i am asking is???? the 2nd way will be faster or it will be the same???? } callme() { u called me,finished in 1 sec;////serverside ignore bandwidth, uniform response throughout }
thanks Swarup -
Hi Mike No i dont think so, take a scenario::
main() { thread t; for(i 0 to 100) {time = t.callme();} ///////so to complete will take 100sec // because one call then another call //now this way thread t[10]; for(i 0 to 10) {t[i].callme();} loop another 10 times more //////so will it take 100sec or less or more????????? ////at a given time 10 threads are running,so time taken should nt be 10 sec, right? it should be therotically 1 sec but say for example 5 secs, am i right???it should be less then 10 sec for 10 threads /////so what i am asking is???? the 2nd way will be faster or it will be the same???? } callme() { u called me,finished in 1 sec;////serverside ignore bandwidth, uniform response throughout }
thanks Swarup -
Hay hi Guys i have a single processor in my system and in my application i create more then 1 thread, so does it enhance my application, as at a given point of time only instruction can be executed, how does it make difference, does it speed up my application, for example i am retrieving 500 web logs from a site, so if i create 10 threads in one go and in each thread i retrieve 1 log i have to make 50 calls at go which will fetch those 500 logs, so will it speed up the downloading or fetching up the logs or should i go with application thread which will fetch 1 by 1, which method will be useful........... or any idea or implimentaion idea.......... i am not concerned about the server bandwidth or speed of my processor, my Question is doing the repetitive work in one thread at a time with multiple time is faster or doing it in multiple threads is faster . P.S. not concerned about UI too thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Thanks Swarup
modified on Tuesday, February 19, 2008 5:12 PM
swarup wrote:
...so does it enhance my application...
Highly doubtful, since all of the context switching would slow it down.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
-
Hay hi Guys i have a single processor in my system and in my application i create more then 1 thread, so does it enhance my application, as at a given point of time only instruction can be executed, how does it make difference, does it speed up my application, for example i am retrieving 500 web logs from a site, so if i create 10 threads in one go and in each thread i retrieve 1 log i have to make 50 calls at go which will fetch those 500 logs, so will it speed up the downloading or fetching up the logs or should i go with application thread which will fetch 1 by 1, which method will be useful........... or any idea or implimentaion idea.......... i am not concerned about the server bandwidth or speed of my processor, my Question is doing the repetitive work in one thread at a time with multiple time is faster or doing it in multiple threads is faster . P.S. not concerned about UI too thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Thanks Swarup
modified on Tuesday, February 19, 2008 5:12 PM
It really depends on what you are doing in the threads. Take your example, you have 100 log files to retrieve and process. Perhaps the time to retrieve a single log file would be about 0.5 seconds, then you do some processing, perhaps search a database, which may take anywhere between 0.1 and 10 seconds, then yes, using several threads would increase the speed. In this case, while one thread does a ten second search, another thread may complete 10 1 second searches. But, if the time is pretty much standard for each log file, then as David Crow said, the constant switching between threads will take away any performance gain.
Waldermort
-
Thank you, but i am nt concerned bout UI part, becas i am handling UI in dif thread, i agree about UI, But what i am talking is, executing 100 threads is better or executing 1 thread is better. example 1 thread called 100 times to do the same work (same work each time) OR 10 threas called 10 times to do the same work (same work each time), which method is faster, which method will complete faster, thats wht i am asking............. Thanks again for ur reply...... thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster Swarup
swarup wrote:
is, executing 100 threads is better or executing 1 thread is better.
That depends on what each thread is doing.
swarup wrote:
1 thread called 100 times to do the same work (same work each time) OR 10 threas called 10 times to do the same work (same work each time), which method is faster, which method will complete faster
Neither will be faster than the other. On a single processor system, executing the same code 100 times, no matter how many threads you use to run the code will not execute any faster. If the code is 1,000 instructions, start-to-finish, the processor has to execute 1,000,000 instructions to get the job done. Since a single proc can only execute one instruction at a time, it doesn't matter how many threads you use, it's still 1,000,000 instructions to execute, one at a time. Now, if you have multiple processors, the CPU can start executing more than one instruction at the same time. The process CAN run faster, but in no way is this guaranteed. It depends on what this code, that your executing 100 times, is doing and how it affects the CPU, memory controller, caching, I/O, ..., ...
swarup wrote:
thread t{ print 1;} /1st time .. thread t{ print 1;}/100th time OR thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/1st 10 run .. thread {t0,t1,t2,t3,t4,t5,t6,t7,t8,t9}{print 1;}/last 10run=100 which will complete faster
On a single core CPU, neither. You seem to have the misconception in your head that more threads = faster performance. Nothing could be further from the truth. Threading is a logical division of work, not a replacement for faster processing.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007