One reason magit is slow (that last I checked still hasn't been fixed) is that it spawns a large number of processes calling out to git for each operation. Most of these are redundant and could/should go away with either a redesign or a working caching scheme. This issue is more than obvious on platforms (e.g. some macOS versions) where fork/vfork are not as fast as one would expect. I like the paradigm behind magit, but the implementation leaves a lot to be desired. So the pig in this case is definitely not Emacs.

Example:

# Doing a simple magit refresh results in the following processes being spawned (tracked with dtrace)
# Notice how many calls are completely redundant

2020 May 4 12:46:22 11819 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11820 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11821 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11822 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11823 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11824 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11825 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11826 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11827 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11828 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11829 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11830 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11831 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11832 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11833 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11834 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11835 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11836 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11837 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11838 <67471> 64b /opt/local/bin/git --no-pager -c core.preloadindex=true -c log.showSignature=false <...>
2020 May 4 12:46:22 11839 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11840 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>
2020 May 4 12:46:22 11841 <67471> 64b /opt/local/bin/git --no-pager -c core.preloadindex=true -c log.showSignature=false <...>
2020 May 4 12:46:22 11842 <67471> 64b /opt/local/bin/git --no-pager -c core.preloadindex=true -c log.showSignature=false <...>
2020 May 4 12:46:22 11843 <67471> 64b /opt/local/bin/git --no-pager -c core.preloadindex=true -c log.showSignature=false <...>
2020 May 4 12:46:22 11844 <67471> 64b /opt/local/bin/git --no-pager -c core.preloadindex=true -c log.showSignature=false <...>
2020 May 4 12:46:22 11845 <67471> 64b /opt/local/bin/git --no-pager -c core.preloadindex=true -c log.showSignature=false <...>
2020 May 4 12:46:22 11846 <67471> 64b /opt/local/bin/git --no-pager --literal-pathspecs -c core.preloadindex=true -c <...>