title: Why do operating systems limit file descriptors?
body: <p>I ask this question after trying my best to research the best way to implement a message queue server. Why do operating systems put limits on the number of open file descriptors a process and the global system can have?
  My current server implementation uses zeromq, and opens a subscriber socket for each connected websocket client.  Obviously that single process is only going to be able to handle clients to the limit of the fds. 
  When I research the topic I find lots of info on how to raise system limits to levels as high as 64k fds but it never mentions how it affects system performance and why it is 1k and lower to start with?
  My current approach is to try and dispatch messaging to all clients using a coroutine in its own loop, and a map of all clients and their subscription channels. But I would just love to hear a solid answer about file descriptor limitations and how they affect applications that try to use them on a per client level with persistent connections?</p>