C10k-ongelma tarkoittaatietotekniikassa suurien verkkoyhteysmäärien käsittelyyn liittyvään ongelmaa. Termin on esittänyt Daniel Kegel, joka viittasi kymmenen tuhannen yhteyden käsittelyyn cdrom.com-sivustolla.Palvelinohjelma voidaan toteuttaa useilla eri tavoilla, joita on kehitetty tehokkaampaan käsittelyyn.[1][2][3] Alkuperäinen C10K viittaa kymmenen tuhannen yhtäaikaisen pyynnön käsittelyyn, josta on johdettu "käänteinen C10K" eli RC10K, jolla viitataan kymmenen tuhannen ulospäin suuntautuvan yhteyden käsittelyyn.[4]
2010-luvun alussa palvelinohjelmistot pystyivät käsittelemään sadoista tuhansista miljoonaan yhtäaikaisista yhteyttä.[5][6] C10k-ongelman sijaan on esitetty C10M-ongelma, joka viittaa kymmeneen miljoonaan yhtäaikaiseen yhteyteen.[7][8] Eräänä ratkaisuna on ehdotettu TCP-pinon siirtämistä käyttäjäavaruuteen käyttöjärjestelmän ytimestä.[9] Myös käyttöjärjestelmän ytimeen on ehdotettu parannuksia.[10]
Syitä ongelmaan on useita, mutta esimerkiksi HTTP-palvelimessa ne liittyvät kahteen suunnittelupäätökseen rinnakkaisuuden ja IO:n käsittelyssä. Esimerkiksi mikäli jokaista yhteyttä kohden luodaansäie hukataan resursseja kun yhteys ei tee mitään tai se joutuu odottamaan.[4]
Unixissa on perinteisesti käytettyselect()
japoll()
järjestelmäkutsuja, jotka vaikkakin nopeita ovat liian hitaita kun yhteysmääriä on paljon. Esitettyjä vaihtoehtoja ovat muun muassaPOSIXin AIO-rajapinta (asynchronous IO) jaI/O completion ports.[3]Linux-ydin on lisännyt AIO-rajapinnan versiossa 2.5, muttaio_uring
on uudempaa kehitystä joka on tarkoitettu korvaamaan AIO-rajapinta.[11]