Yes, there are resource limits on threads that are determined by your operating system and hardware.
Maximum number of threads per process in Linux?
You NEVER build a massively parallel server using a thread per connection. Use select() or poll() and non-blocking sockets. If you need to have more than one thread working on input (it really takes a lot before you can't do it in one process and you shouldn't be making blocking calls regardless), then create a worker pool sized around the number of processor cores you have available, and use those to process work as it becomes available.
More details on the worker pool concept. One thread can handle reading all the incoming network data off the network and tossing it somewhere. There is still additional work to do to process that data, however. For a simple chat server type application, no matter how many connections, one thread can probably be responsible for reading the data and processing the data.
However, if you have to do something like a bunch of physics calculations on each chunk of data received, one thread may not be able to handle all that math and stay current with incoming network data. In this case, have one thread take the data off the network and put it into a sychronized queue of data to be processed. Then have a handful or two of worker threads taking data off the queue and processing it in a thread-safe manner.
If you try to do this with thousands of threads, you will slow yourself down. They will all contend for system resources and you will actually proceed slower due to none of them getting the cpu cycles or RAM or CPU cache they want.
http://en.wikipedia.org/wiki/Thread_pool_pattern