What is the difference between Qiskit execute and the IBMQJobManager?

I was researching how to submit multiple pulse schedules/circuits in the same job and came across 2 methods:

1. Executing Experiments with qiskit.execute
2. and IBMQJobManager.run

What are the advantages and disadvantages of using either over the other?

qiskit.execute is a convenience function that does both transpile and assemble under the cover.
IBMQJobManager.run does not do transpile, but it does assemble. IBMQJobManager will, however, split your schedules/circuits into multiple jobs, submit them, and consolidate the results if the number of schedules/circuits exceed the maximum allowed for a backend per job. qiskit.execute doesn't do this and the job will just fail the limit is reached.