C10k-ongelma tarkoittaa tietotekniikassa 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. 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.
2010-luvun alussa palvelinohjelmistot pystyivät käsittelemään sadoista tuhansista miljoonaan yhtäaikaisista yhteyttä. C10k-ongelman sijaan on esitetty C10M-ongelma, joka viittaa kymmeneen miljoonaan yhtäaikaiseen yhteyteen. Eräänä ratkaisuna on ehdotettu TCP-pinon siirtämistä käyttäjäavaruuteen käyttöjärjestelmän ytimestä. Myös käyttöjärjestelmän ytimeen on ehdotettu parannuksia.
Syitä 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 luodaan säie hukataan resursseja kun yhteys ei tee mitään tai se joutuu odottamaan.
Tekniikka Unixissa on perinteisesti käytetty select() ja poll() järjestelmäkutsuja, jotka vaikkakin nopeita ovat liian hitaita kun yhteysmääriä on paljon. Esitettyjä vaihtoehtoja ovat muun muassa POSIXin AIO-rajapinta (asynchronous IO) ja I/O completion ports. Linux-ydin on lisännyt AIO-rajapinnan versiossa 2.5, mutta io_uring on uudempaa kehitystä joka on tarkoitettu korvaamaan AIO-rajapinta.
Lähteet
Luokka:Tietotekniikka Luokka:Tietokoneen suorituskyky