I'm sure that I have never got more than 1 message from SNS per lambda invoke, however this might be down to a low frequency of SNS dispatches (around 1 per min) in my experience.
From your stated volume of messages (10,000+) per invoke, I'm not 100% sure what you are looking to implement (message bus or message dispatch) but I think kinesis might be what you are after:
Kinesis works with your lambda function in a few different ways -> http://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html
It sounds like you are after the event structure (pull down multiple messages in one invoke), kinesis adds multiple messages to the stack and you grab as many messages from the stack as you need to process (setting the pointers etc), 10k in this use case.
Thing to watch out with here is how long it takes your lambda to process the 10,000 messages, if it takes a while to complete you might max out your invoke time before you finish (also you will pay more $ due to long run time). Also do you want to process less than 10k messages or are you going to wait until you have 10k messages waiting to be processed?
SNS to lambda will be invoked per message dispatch. so as you push your 10k messages into SNS it will dispatch these to a listening lambda (eventually). I don't think this really fits your use case but offers a benefit if you change your design idea a bit. Instead of processing in 10k batches you can process single messages at a time, this will have a shorter invoke time and will hopefully ensure your lambda doesn't max out its invoke time.
Bottom line in design is to weigh up if a batch processing design is really what you need or if stream processing works for you. Kinesis offers both options (may be with higher costs and setup complexity) but SNS will only really serve a message per invoke design (but is a lot easier to setup).
Sorry if this is still a bit vague, Hope this helps a little