A database connection is made for each ArcGIS Server instance (ArcSOC.exe) that is created for the service(s). The min and max number of instances can be set by right-clicking on the service > Service Properties > Pooling tab. By default, the minimum number of instances is set to 1 and the maximum is set to 2. Therefore, when you start the service 1 connection is made to the SDE geodatabase.
By default, an instance is created as Pooled. This means when a request (ie pan/zoom in web app) is made to the service, an instance is taken from the pool, and then returned when the request is over. Once another request is made, say from another web app, that same instance can be used for that service request. So, multiple requests will need to be made at the same time in order for another instance to be created, thus creating another connection to the SDE geodatabase. This will not exceed the maximum number of instances, so by default a service can never exceed two connections to the geodatabase unless this paramter is increased. If the max number of instances is exceeded, the client will have to wait until an instance is returned to the pool before their request is returned.
Say the max instances of a service is set to two and both are being used, creating two connections to the SDE geodatabase. Then one of the users is finished accessing the service. The second SDE connection will remain until the idle time expires (set within the Services Properties > Pooling tab). Once the idle time expires, the instance will be removed from the server and the connection deleted from the SDE geodatabase.
The gdb I'm connecting to was created when I was using the SDE personal license; now, after i've switched to an SDE Workgroup license, it seems like the gdb still only accepts the max. # of personal license connections; almost as if this wasn't updated.
SOC connections can consume as many connections that the service's max instance is set to. You can check this by right-clicking on the service > Service Properties > Pooling tab. If the max is set to 2, and two users are using the service concurrently, then this will spawn two SOC connections within the geodatabase. See my post above for a more in depth explanation.