From the Blue Book (OpenGL Superbible 7th ed., pp. 662f.):
You can have multiple contexts and share data between them, but that isn't very effective. The approach sketched in the other answer (one render thread - mutliple data generation threads) is surely the best practice.
You can have buffer objects to your application's needs and pass pointers around ...
OpenGL is not multithreaded. All your GL commands must run in the same thread in which the GL context was created: it is not shareable between threads.
Any attempt to share the context between threads will lead to undefined behaviour.
Your high ms/frame time is due to everything being done on a single thread.
I propose two practical solutions to your problem:...