Hallo Christian,
Das Problem ist, dass der poll-Thread jedesmal, wenn er
getimesliced werden koennte (im select()) direkt wieder
zurueck kehrt mit einer neuen Verbindung. Da hat halt
ein Worker-Thread kaum Gelegenheit, zu arbeiten.Und die Threads unter FreeBSD arbeiten nicht mit
präempetiven, sondern mit kooperativen Multitasking?
Das hat damit gar nichts zu tun. Da bei der Maschine nicht
beide Prozessoren im Betrieb sind, koennen halt nicht mehrere
Threads gleichzeitig arbeiten, sondern sie muessen
nacheinander durchgearbeitet werden. Wie genau das passiert,
definiert der Scheduler (Round-Robin wird im Moment
eingesetzt). Aber *wann* getimesliced wird, haengt von vielen
Faktoren ab. Leider eben nicht, wenn derart viele
Verbindungen in der Listen-Queque haengen (da kehrt der
Thread halt direkt aus dem poll wieder zurueck. Und da das
durch ein Signal passiert, ist das toedlich fuer den
Scheduler).
Gruesse,
CK