1. В большинстве случаев, классический подход — 1 поток, синхронная обработка — достаточно быстр. Особенно если нет чтений из файлов и прочего.
2. Если пункт 1 не подходит — потоков должно быть статическое количество, желательно равное количеству аппаратных потоков (ядер) процессора.
Если интересна теория — смотри автоматы Мура / Мили, событийно-ориентированные подход, если язык — смотрите предыдущий ответ.