Skip to content
Search

C10K

lastmod 2016-10-12created 2015-07-303 edits

The C10K Problem arises from the question of how many Clients can connect to a single System, and from the challenge of answering it.

Comment

When BSD sockets were designed, the hardware environment could not support 10K clients connecting. 1

Back then the hardware was the bottleneck, but from the late '80s scholars argued that the software crisis had to be accepted as reality. They found that hardware improves fourfold every 10 years, while software does not. Of course, this is a problem raised from the software engineering perspective.

The question was raised whether the I/O Model of UNIX-like OSes could open more than 2K sockets and still perform normal I/O. 2

On UNIX-like systems there is the cost of creating File Descriptors and the problem of synchronizing that many sockets. In other words, the C10K Problem is that if you open as many as 10K sockets, the process cannot handle them properly because of the I/O handling method the OS provides, even though the hardware is sufficient. 3

This turned into a "let's give it a try" C10K Project, and starting from the /dev/poll model proposed by Solaris, various models have appeared and are being applied. What solved this problem well and was actually applied well is Overlapped I/O and IOCP in MS Windows.

In summary, the C10K Problem was raised because of the inadequate I/O models of UNIX-like OSes. Many solutions are now appearing for it.

Favorite site

References


  1. If 10K connect to a web server at the same time, the network bandwidth alone is already at the gigabit level. That was unimaginable 20 years ago when the concept of sockets was introduced, and hardware that could handle the accompanying resource management did not even exist ↩

  2. 2048 is the MAX value of the File Descriptor array passed as a parameter to the select() function ↩

  3. It does not mean 10K is the limit; it just means "many". ↩