Блокировка требуется только при наличии общего ресурса.При подключении к БД вы сначала создаете объект подключения, а затем через этот объект вы подключаетесь и отправляете свои запросы.В MySQL innoDb
база данных выполняет блокировку на уровне строк, и не вся таблица блокируется.Таким образом, если несколько процессов пытаются получить доступ к разным строкам, блокировка не требуется.
При переходе к потокам люди чаще всего создают пул соединений, в котором несколько threads
получают доступ к этому пулу.Допустим, у вас есть 50 потоков и пул соединений из 5 объектов.Теперь все 50 потоков не могут получить доступ к этим 5 объектам соединения, которые им нужны, чтобы дождаться освобождения объекта соединения, и как только оно освободится, они могут использовать объект соединения для запуска запроса.Потоки разделяют одно и то же пространство памяти, поэтому в основном все общие ресурсы должны быть поточно-безопасными
Поскольку создание процесса довольно тяжелое, вы хотели бы сохранить его менее 10-20 процессов на машине 4 ГБ.Но создавать потоки дешевле, вы можете иметь их в большом количестве (~ 50).Так что, если не для чего делиться, потоки дадут больше параллелизма.
Опять все сводится к тому, насколько хорош ваш дизайн, и это очень специфично для проблемы.