![]() |
|
|
|
|
|||||||
| IP Networking Questions involving TCP/IP, Routers, Hubs, Network protocols, etc go here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Executing Multiple .SQL Files from Single Shell Script file | anushilrai | Shell Programming and Scripting | 3 | 04-07-2008 07:09 AM |
| how to divide single large log file into multiple files. | kamleshm | Shell Programming and Scripting | 1 | 01-15-2008 03:33 PM |
| Copy single file to multiple directories | kthatch | UNIX for Dummies Questions & Answers | 2 | 11-11-2007 02:10 PM |
| How to Write Linux Friendly Async Socket I/O | siegfried | High Level Programming | 3 | 05-25-2007 04:10 AM |
| read/write socket error | gio | High Level Programming | 2 | 04-16-2007 08:52 PM |
|
|
Submit Tools | LinkBack | Thread Tools | Display Modes |
|
|||
|
Hi Friends,
I have written a program which will listener for more than 1000 requests per second from a single socket descriptor and then it will process those requestes. Its taking X amount of time. Now i want to reduce that time. Will I can write multiple threads to receive the request from the same socket file descriptor. Is it possible.. please help me.. |
| Forum Sponsor | ||
|
|
|
|||
|
Use AIO or Thread Pool
Multiple threads can definately listen to single socket. All threads can be blocked on "select" or "poll" system-call. Now depending on number of CPU your that many number of threads will come out of select/poll system call then if its TCP you mandatory call "accept" system-call. Here only 1 thread will succeed and remaining threads will fails which again go back to select/poll system-call. Now if instead of TCP you using UDP then same above syncronization will happen at "read" system-call and remaining threads has to go back at select/poll. Pseudo code will look like
while(1) { select(sockfd); rs = accept(sockfd); if(rs == -1) continue; thread_function(); } But from past-experience. I'd recommend you to re-design of your software with producer and worker concept. One thread will read data on socket then it will select a thread from pool and assign work to that. From our statistics I'd say 1GHz CPU can efficiently hangle 25 complex threads only!!! And for multithreads instead of deploying higher capacity of CPU you should go for higher multi-core procerrors only!!! |
|
|||
|
I agree with
------------------------------------------------------------- I'd recommend you to re-design of your software with producer and worker concept. One thread will read data on socket then it will select a thread from pool and assign work to that. ---------------------------------------------------------------- |
|||
| Google UNIX.COM |
| Thread Tools | |
| Display Modes | |
|
|