C10K是一個現(xiàn)象,其根源在于程序員“想當然”
同時工作的進程數(shù)
歷史上UNIX的進程ID是16位整數(shù)改淑,也就是進程最多不超過32767。現(xiàn)代的Linux系統(tǒng)進程ID雖然是32位朵夏,但是系統(tǒng)仍然限制了大小。想要一個連接一個進程仰猖,必然會觸發(fā)其上限。內存的容量足夠處理所創(chuàng)建的進程和線程
系統(tǒng)進程和線程是有一定內存消耗的(1~2M)鸵赫,1w個需要10G。這樣一來光系統(tǒng)就把內存吃光了奉瘤。同時打開文件描述符
Linux默認情況下煮甥,一個進程所能打開文件最大數(shù)量是1024個〕芍猓考慮用單進程處理所以連接必須注意到這點。對多個文件描述符進行監(jiān)視双霍,用select系統(tǒng)調用
select雖然有上限,用多個進程是不是可以規(guī)避這個問題染坯?這也是想當然。select本身就是一個輪詢的實現(xiàn)单鹿,不管怎么用都無法改變深纲。
操作系統(tǒng)后來也給出了解決方案,但無論如何湃鹊,處理的上限任然是存在的:也許是C100K,或者是C1000K币呵。解決C10K并不重要,重要的是要知道,在當前系統(tǒng)架構下哈垢,系統(tǒng)的上限是多少毕贼。決定這個上限的,是系統(tǒng)里最薄弱的部分