mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	Drop unfounded claims about performance.
This commit is contained in:
		
							parent
							
								
									f0cdbad1b3
								
							
						
					
					
						commit
						2d449aa004
					
				
					 1 changed files with 1 additions and 27 deletions
				
			
		| 
						 | 
					@ -386,32 +386,6 @@ determining whether the other end is done, or just busy with something else.
 | 
				
			||||||
files. Don't try this on Windows. On Windows, ``select`` works with sockets
 | 
					files. Don't try this on Windows. On Windows, ``select`` works with sockets
 | 
				
			||||||
only. Also note that in C, many of the more advanced socket options are done
 | 
					only. Also note that in C, many of the more advanced socket options are done
 | 
				
			||||||
differently on Windows. In fact, on Windows I usually use threads (which work
 | 
					differently on Windows. In fact, on Windows I usually use threads (which work
 | 
				
			||||||
very, very well) with my sockets. Face it, if you want any kind of performance,
 | 
					very, very well) with my sockets.
 | 
				
			||||||
your code will look very different on Windows than on Unix.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Performance
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
There's no question that the fastest sockets code uses non-blocking sockets and
 | 
					 | 
				
			||||||
select to multiplex them. You can put together something that will saturate a
 | 
					 | 
				
			||||||
LAN connection without putting any strain on the CPU. The trouble is that an app
 | 
					 | 
				
			||||||
written this way can't do much of anything else - it needs to be ready to
 | 
					 | 
				
			||||||
shuffle bytes around at all times.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Assuming that your app is actually supposed to do something more than that,
 | 
					 | 
				
			||||||
threading is the optimal solution, (and using non-blocking sockets will be
 | 
					 | 
				
			||||||
faster than using blocking sockets). Unfortunately, threading support in Unixes
 | 
					 | 
				
			||||||
varies both in API and quality. So the normal Unix solution is to fork a
 | 
					 | 
				
			||||||
subprocess to deal with each connection. The overhead for this is significant
 | 
					 | 
				
			||||||
(and don't do this on Windows - the overhead of process creation is enormous
 | 
					 | 
				
			||||||
there). It also means that unless each subprocess is completely independent,
 | 
					 | 
				
			||||||
you'll need to use another form of IPC, say a pipe, or shared memory and
 | 
					 | 
				
			||||||
semaphores, to communicate between the parent and child processes.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Finally, remember that even though blocking sockets are somewhat slower than
 | 
					 | 
				
			||||||
non-blocking, in many cases they are the "right" solution. After all, if your
 | 
					 | 
				
			||||||
app is driven by the data it receives over a socket, there's not much sense in
 | 
					 | 
				
			||||||
complicating the logic just so your app can wait on ``select`` instead of
 | 
					 | 
				
			||||||
``recv``.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue