class Async::Pool::Controller

def prune(retain = 0)

@yields {|resource| ...} Any unused resource.
@parameter retain [Integer] the minimum number of resources to retain.
Retire (and close) all unused resources. If a block is provided, it should implement the desired functionality for unused resources.
def prune(retain = 0)
	unused = []
	
	# This code must not context switch:
	@resources.each do |resource, usage|
		if usage.zero?
			unused << resource
		end
	end
	
	# It's okay for this to context switch:
	unused.each do |resource|
		if block_given?
			yield resource
		else
			retire(resource)
		end
		
		break if @resources.size <= retain
	end
	
	# Update availability list:
	@available.clear
	@resources.each do |resource, usage|
		if usage < resource.concurrency and resource.reusable?
			@available << resource
		end
	end
	
	return unused.size
end